社区讨论
求助逃亡的准备-如何优化
灌水区参与者 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 条回复,欢迎继续交流。
正在加载回复...