版权声明:华天才原创 https://blog.csdn.net/weixin_43891469/article/details/88088286
题目描述
央视有一个大型娱乐节目—购物街,舞台上模拟超市大卖场,有很多货物,每个嘉宾分配一个购物车,可以尽情地装满购物车,购物车中装的货物价值最高者取胜。假设有 n 个 物品和 1 个购物车,每个物品 i 对应价值为 vi,重量 wi,购物车的容量为 W(你也可以将重 量设定为体积)。每个物品只有 1 件,要么装入,要么不装入,不可拆分。在购物车不超重 的情况下,如何选取物品装入购物车,使所装入的物品的总价值最大?最大价值是多少?装 入了哪些物品?
输入
输入T,表示有T组数据(1<=T<=10)
输入物品的个数 n (1<=n<=20)
输入购物车的容量W(1<=W<=20)
依次输入每个物品的重量w和价值v,用空格分开
输出
输出装入购物车的最大价值是多少
标程
#include<bits/stdc++.h>
#define maxn 1005
using namespace std;
int w[maxn],v[maxn],dp[maxn];
int n,W,m;
int main(){
cin>>m;
while(m--){
memset(dp,0,sizeof dp);
cin>>n>>W;
for(int i=1;i<=n;i++)
cin>>w[i]>>v[i];
for(int i=1;i<=n;i++){
for(int j=W;j>=w[i];j--)
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
}
cout<<dp[W]<<endl;
}
return 0;
}