HDU 1171 Big Event in HDU

来源:互联网 发布:高铁买票软件 编辑:程序博客网 时间:2024/06/08 17:43

简单多重背包

求出能组合出最接近总数一半的方案

#include<bits/stdc++.h>using namespace std;int V[120],M[120];int dp[300020],use[300020];int main(){    int N;    while(scanf("%d",&N)==1&&N>0)    {        memset(dp,0,sizeof(dp));        int sum=0;        for(int i=1;i<=N;i++)        {            scanf("%d%d",&V[i],&M[i]);            sum+=V[i]*M[i];        }        dp[0]=1;        for(int i=1;i<=N;i++)        {                memset(use,0,sizeof(use));                for(int j=V[i];j<=sum/2;j++)                {                    if(dp[j]==0&&dp[j-V[i]]==1&&use[j-V[i]]<M[i])                    {                        dp[j]=1;                        use[j]=use[j-V[i]]+1;                    }                }        }        for(int i=sum/2;i>=0;i--)        {            if(dp[i]==1)            {                printf("%d %d\n",sum-i,i);                break;            }        }    }    return 0;}


0 0
原创粉丝点击