Feown


私信TA

用户名:uq_13516770928

访问量:4428

签 名:

等  级
排  名 3490
经  验 1835
参赛次数 0
文章发表 21
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

转化为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 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区