Feown


私信TA

用户名:uq_13516770928

访问量:4879

签 名:

等  级
排  名 3614
经  验 1887
参赛次数 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 人评分

  评论区

  • «
  • »