SuperSale UVA

来源:互联网 发布:mac卸载软件 编辑:程序博客网 时间:2024/06/06 15:37
01背包
题目描述:一家人去超市买东西,各种物品有价格和重量,每个人都有自己的背包容量,求这一家人能够获得最大价值。
解题分析:刚开始被这题给唬住了,想成了如果一个物品被某人买了,则其他人不可以卖这个物品,那这就难了。但是想想也该明白那家超市一种物品只卖一件啊,超时的物品是任意多的。这题就是单纯的01背包。

代码如下:

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int INF = 0x3f3f3f3f;const int maxn = 1000 + 10;int v[maxn];int w[maxn];int dp[maxn];int peo[maxn];int N,M;int main(){    int kase;    cin >> kase;    while(kase--)    {        memset(dp,0,sizeof(dp));        cin >> N;        for(int i = 1; i <= N; i++)        {            scanf("%d %d",&v[i],&w[i]);        }        cin >> M;        for(int i = 0; i < M; i++)        {            scanf("%d",&peo[i]);        }        for(int i = 1; i <= N; i++)        {            for(int j = 30; j >= w[i]; j--)            {                dp[j] = max(dp[j],dp[j-w[i]] + v[i]);            }        }        int ans = 0;        for(int i = 0; i < M; i++) ans += dp[peo[i]];        cout << ans << endl;    }    return 0;}


原创粉丝点击