转化为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语言代码)浏览:998 |
C语言程序设计教程(第三版)课后习题8.9 (Java代码)浏览:1335 |
【绝对值排序】 (C++代码)浏览:672 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:638 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:523 |
WU-蓝桥杯算法提高VIP-企业奖金发放 (C++代码)浏览:1175 |
大家好,我是验题君浏览:577 |
1048题解(读入回车问题)浏览:565 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:573 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:674 |