大卖场购物车(题解)

版权声明:华天才原创 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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43891469/article/details/88088286