1. 程式人生 > >HDU 1171 Big Event in HDU(01背包)

HDU 1171 Big Event in HDU(01背包)

sum tar eof 可能 ret pac include blank http

題目鏈接

題意:給出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背包)