题目大意:主人公有n节课要学,但是只有m天。每组课花费的天数而导致的价值也会不一样。输入n,m。之后n行m列代表i节课学了j天的价值。求最大价值是多少?
思路分析:
首先吐槽一下这个题目,看了半天愣是没读懂题目。
现在让我们思考一下题目,题目 n节课可以对应 n组物品,m天可以对应 m 单位体积 ,那么问题就是在体积为m的前提下,求出n组物品的最大价值。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include <cstdio> 2 #include <cstring> 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 }