HDU 1171 Big Event in HDU(01背包)

Posted Ritchie丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 1171 Big Event in HDU(01背包)相关的知识,希望对你有一定的参考价值。

题目链接

题意:给出n个物品的价值v,每个物品有m个,设总价值为sum,求a,b。a+b=sum,且a尽可能接近b,a>=b。

题解:01背包。

#include <bits/stdc++.h>
using namespace std;
int data[5050],dp[125050],n,v,m;
int main()
{
    while(scanf("%d",&n)&&n>0)
    {
        memset(dp,0,sizeof(dp));
        int sum=0,cnt=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d%d",&v,&m);
            sum+=v*m;
            while(m--) data[cnt++]=v;
        }
        int k=sum/2;
        for(int i=0;i<cnt;i++)//注意不是n
        for(int j=k;j>=data[i];j--)
        dp[j]=max(dp[j],dp[j-data[i]]+data[i]);
        printf("%d %d\n",sum-dp[k],dp[k]);
    }
    return 0;
}

 

以上是关于HDU 1171 Big Event in HDU(01背包)的主要内容,如果未能解决你的问题,请参考以下文章

HDU-1171 Big Event in HDU (多重背包)

HDU 1171 Big Event in HDU(多重背包)

Hdu 1171Big Event in HDU

hdu 1171 Big Event in HDU

Big Event in HDU HDU - 1171

HDU1171--Big Event in HDU(多重背包)