HDOJ  1171   Big Event in HDU

来源:互联网 发布:百度世界人工智能大会 编辑:程序博客网 时间:2024/05/16 00:38

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

题目大意为有一些器材每个器材都有其特定的价值,

现在将这些器材分为来两组AandB,而且A>B

#include <stdio.h>
#include <string.h>
int c1[250050],c2[250050];
int main()
{
    intnum[55],m[55],sum;
    inti,j,k,len,n;
   while(scanf("%d",&n),n>0)
    {
       sum=0;
       memset(m,0,sizeof(m));
       memset(num,0,sizeof(num));
        for(i=1;i<=n;i++)
        {
           scanf("%d%d",&m[i],&num[i]);
           sum+=m[i]*num[i];
        }
        memset(c1,0,sizeof(c1));
        memset(c2,0,sizeof(c2));
        len=num[1]*m[1];
        for( i=0; i<=len;i+=m[1])
                c1[i]=1;
        for( i=2; i<=n; i++)
        {
              for( j=0; j<=len; j++)
                 for(int k=0; k<=m[i]*num[i]; k+=m[i])
                         c2[j+k]+=c1[j];
              len+=num[i]*m[i];
              for( j=0; j<=len; j++)
              {
                      c1[j]=c2[j];
                      c2[j]=0;
              }
        }
        for( i=sum/2; i>=0;i--)
          if(c1[i]!=0)
           {
             printf("%d %d\n",sum-i,i);
             break;
           }
    }
    return0;
}

0 0
原创粉丝点击