转化为01背包的做法,在01背包的基础上加上一个for循环表示第i个物品装0->c[i]个即可
参考代码:
#include<iostream> using namespace std; const int M = 10000; int n, m; int dp[M], w[M], v[M], c[M]; int main(){ cin>>n>>m; for(int i = 0; i < n; i++){ cin>>w[i]>>v[i]>>c[i]; } for(int i = 0; i < n; i++){ for(int j = m; j >= 0; j--){ for(int k = 0; k <= c[i]; k++){ if(j >= w[i] * k){ dp[j] = max(dp[j], dp[j - k * w[i]] + k * v[i]); } } } } cout<<dp[m]; return 0; }
0.0分
2 人评分
C二级辅导-统计字符 (C语言代码)浏览:541 |
简单的a+b (C语言代码)浏览:629 |
大神老白 (C语言代码)浏览:715 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:598 |
分糖果 (C++代码)浏览:1447 |
简单的a+b (C语言代码)浏览:530 |
字符串对比 (C语言代码)浏览:1413 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:2081 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:687 |
WU-复数求和 (C++代码)浏览:2015 |