解题思路: 在01背包的基础上再套多一层循环以表示该物品的个数
注意事项:
参考代码:
#include<stdio.h> #define max(x,y) ((x)>(y)?(x):(y)) int main(){ int i,j,k,n,m; int c[1001]={0},w[1001]={0},v[1001]={0},dp[4001]={0}; scanf("%d%d",&n,&m); for(i=1;i<=n;i++){ scanf("%d%d%d",&w[i],&v[i],&c[i]); } for(i=1;i<=n;i++){ for(k=1;k<=c[i];k++){ for(j=m;j>=w[i];j--){ dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } } } printf("%d\n",dp[m]); return 0; }
0.0分
0 人评分
【数组的距离】 (C语言代码)浏览:636 |
数列 (C++代码)浏览:707 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:583 |
用筛法求之N内的素数。 (C语言代码)浏览:1385 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:588 |
简单的a+b (C语言代码)浏览:641 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:648 |
C语言程序设计教程(第三版)课后习题6.3 (C++代码)浏览:1067 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:582 |
Tom数 (C语言代码)浏览:758 |