您的位置:首页 > 其它

HDU 1171 Big Event in HDU

2015-08-28 09:32 323 查看
//加油!

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string.h>
using namespace std;
const int maxn = 250000 + 5;
int dp[maxn];
int cnt[5000+5];
int main()
{
    int n;
    while(scanf("%d", &n) == 1 && n > 0)
    {
        int a,b;
        int k = 0;
        int sum = 0;
        memset(dp,0,sizeof(dp));
        memset(cnt,0,sizeof(cnt));
        while(n--)
        {
            scanf("%d%d", &a, &b);
            while(b--)
            {
                cnt[k++] = a;
                sum += a;
            }
        }
        for(int i = 0; i <k; ++i)
            for(int j = sum/2; j >= cnt[i]; --j)
                dp[j] = max(dp[j], dp[j-cnt[i]] + cnt[i]);
        cout << sum - dp[sum/2] << " " << dp[sum/2] << endl;
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: