hdu 1117 Big Event in HDU

题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=1171

本身是一个多重背包的题,但是可以通过一个简单地转换变成一个01背包的问题,这样题目做起来的话就肥城的简单了

直接上代码把

简单是数一下题意

就是说 有一堆物品,分成两部分,要求两堆物品要尽可能地一样多,而且前一堆物品不能比第二堆物品多

#include 
#include 
int val[5005];
int dp[255555];

int max(int a, int b)
{
    return a>b?a:b;
}
int main()
{
    int n,i,j,valve,number,l,sum;
    while(scanf("%d",&n)&&n>0)
    {
        memset(val,0,sizeof(val));
        memset(dp,0,sizeof(dp));
        l = 0;
        sum = 0;
        for(i = 0;i=val[i];j--)//01背包
            {
                dp[j] = max(dp[j],dp[j-val[i]]+val[i]);
            }
        }
        printf("%d %d\n",sum-dp[sum/2],dp[sum/2]);
    }
    
    return 0;
}


你可能感兴趣的:(ACM学习笔记,背包问题的转换)