解题思路:多重背包的模板题,就是在01背包的基础上多加了一个循环取奖品的个数
参考代码:
// // Created by 15420 on 2021/5/20. // #include <iostream> using namespace std; int n,m,v[510],w[510],s[510],dp[6600]; int main() { cin>>n>>m;//n代表希望购买的奖品的种数,m表示拨款金额。 for (int i = 1; i <=n ; ++i) { cin>>v[i]>>w[i]>>s[i];//分别表示第I种奖品的价格、价值(价格与价值是不同的概念)和能购买的最大数量(买0件到s件均可) } for (int i = 1; i <=n ; ++i) {//其实就是01背包多加了一个循环取奖品的个数 for (int j = m; j >=1 ; --j) { for (int k = 0; k <=s[i]&&j>=k*v[i] ; ++k) {//购买奖品的个数不能超过s[i]个,取k个i物品价值不能超过总价值 dp[j]=max(dp[j],dp[j-k*v[i]]+k*w[i]);//这里是取和不取k个奖品那个更好 } } } cout<<dp[m];//最后输出奖品的最大总价值 return 0; }
0.0分
6 人评分
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:557 |
弟弟的作业 (C++代码)浏览:1302 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:584 |
多输入输出练习1 (C语言代码)浏览:1182 |
求圆的面积 (C语言代码)浏览:1270 |
不会做的浏览:874 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:553 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:772 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:540 |
用筛法求之N内的素数。 (C语言代码)浏览:646 |