题目大意:主人公有n节课要学,但是只有m天。每组课花费的天数而导致的价值也会不一样。输入n,m。之后n行m列代表i节课学了j天的价值。求最大价值是多少?
思路分析:
首先吐槽一下这个题目,看了半天愣是没读懂题目。
现在让我们思考一下题目,题目 n节课可以对应 n组物品,m天可以对应 m 单位体积 ,那么问题就是在体积为m的前提下,求出n组物品的最大价值。
1 #include2 #include 3 int dp[100005],a[105][105],n,m; 4 int main(){ 5 while( scanf("%d%d",&n,&m) && (n!=0 && m!=0)){ 6 memset(dp,0,sizeof(dp)); 7 for(int i=1;i<=n;i++) 8 for(int j=1;j<=m;j++) 9 scanf("%d",&a[i][j]);10 for(int i=1;i<=n;i++){11 for(int j=m;j>=0;j--){12 for(int k=1;k<=j;k++)13 if(dp[j]<=dp[j-k]+a[i][k]) dp[j]=dp[j-k]+a[i][k];14 }15 }16 printf("%d\n",dp[m]);17 }18 }