码迷,mamicode.com
首页 > 其他好文 > 详细

uva10130-超级大甩卖

时间:2016-08-20 16:12:26      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

题目链接 http://acm.hust.edu.cn/vjudge/problem/19210

 

解题思路

就是0-1背包问题。只是不止一个背包。

可以用滚动数组降成一维。

 

代码

#include<iostream>
#include<cstdio> 
#include<string.h>
using namespace std;
const int maxLen = 1000;
int dp[105][35];
int w[maxLen], v[maxLen];
int maxw[105];
int maxValue[105];
int cases, n, m;
void Read()
{
    scanf("%d", &n);
    for(int i=1; i<=n; i++) scanf("%d%d", &w[i], &v[i]);
    scanf("%d", &m);
    for(int i=1; i<=m; i++) scanf("%d", &maxw[i]);
}
int main()
{
    cin >> cases;
    while(cases--) {
        memset(dp, 0, sizeof(dp));
        Read();
        int people = 1;
        while(people <= m) {
            for(int i=1; i<=n; i++)
                for(int j=maxw[people]; j>=0; j--)
                    if(j - v[i] >= 0)
                        dp[people][j] = max(dp[people][j-v[i]] + w[i], dp[people][j]);
            maxValue[people] = dp[people][maxw[people]];
            people++;
        }
        int tot = 0;
        for(int i=1; i<people; i++) tot += maxValue[i];
        printf("%d\n", tot);
    }
}

 

uva10130-超级大甩卖

标签:

原文地址:http://www.cnblogs.com/ZengWangli/p/5790406.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!