社区讨论

求助逃亡的准备-如何优化

灌水区参与者 5已保存回复 11

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
11 条
当前快照
1 份
快照标识符
@lo25hxau
此快照首次捕获于
2023/10/23 08:19
2 年前
此快照最后确认于
2023/11/03 08:37
2 年前
查看原帖

题目简介

在《Harry Potter and the Deathly Hallows》中,Harry Potter他们一起逃亡,现在有许多的东西要放到赫敏的包里面,但是包的大小有限,所以我们只能够在里面放入非常 重要的物品,现在给出该种物品的数量、体积、价值的数值,希望你能够算出能使背包的价值最大的组合方式,并且输出这个数值,赫敏会非常地感谢你。

输入

第一行有2个整数,物品种数n和背包装载体积v。 第2行到i+1行每行3个整数,为第i种物品的数量m、体积w、价值s。

输出

包含一个整数,即为能拿到的最大的物品价值总和。

样例输入

2 10
3 4 3
2 2 5

样例输出

13

数据范围&样例说明

选第一种一个,第二种两个。结果为31+52=13 【数据规模】 对于30%的数据 1<=v<=500,1<=n<=2000,1<=m<=10,1<=w<=20,1<=s<=100 对于100%的数据 1<=v<=500,1<=n<=2000,1<=m<=5000,1<=w<=20,1<=s<=100

CPP
#include<bits/stdc++.h>
using namespace std;
int v[2601],w[2010],s[2001],dp[2001][501];
int n,m;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	cin>>s[i]>>v[i]>>w[i];
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
	for(int k=0;k<=s[i];k++)
	{
		if(j>=k*v[i])
		dp[i][j]=max(dp[i][j],dp[i-1][j-k*v[i]]+k*w[i]);
	}
	cout<<dp[n][m];
	return 0;
}

回复

11 条回复,欢迎继续交流。

正在加载回复...