Example #1
0
void
dp()
{
	int i;
	for(i=1; i<=n; i++)
		MultiplePack(cv[i], cv[i], num[i]);
}
int main()
{
    int i,t;
    int sum;
    for(t=1;1;++t)
    {
        scanf("%d %d %d %d %d %d",lst+1,lst+2,lst+3,lst+4,lst+5,lst+6);
        sum=lst[1]+lst[2]*2+lst[3]*3+lst[4]*4+lst[5]*5+lst[6]*6;//价值和
        if(sum==0)
            break;
        printf("Collection #%d:\n",t);
        if(sum%2)//价值和为奇数,不可分
        {
            printf("Can't be divided.\n\n");
        }
        else
        {
            V=sum/2;//目标价值
            memset(F,0,(V+1)*sizeof(int));
            // 多重背包
            for(i=1;i<=6;++i)
            {
                if(lst[i]!=0)//有弹珠
                {
                    MultiplePack(i,i,lst[i]);//费用与价值合一,固V费用应该得到V的价值
                }
            }
            if(F[V]==V)//V的容量的目标价值为V
                printf("Can be divided.\n\n");
            else
                printf("Can't be divided.\n\n");
        }
    }
    return 0;
}
Example #3
0
int main(){
    int i, j, t=1, a[10], sum;
    while(scanf("%d%d%d%d%d%d%d%d%d%d",&a[1],&a[2],&a[3],
                         &a[4],&a[5],&a[6],&a[7],&a[8],&a[9],&a[10]))
    {
           if(a[1]==0&&a[2]==0&&a[3]==0&&a[4]==0&&a[5]==0
                     &&a[6]==0&&a[7]==0&&a[8]==0&&a[9]==0&&a[10]==0)
                  break;//结束条件
           sum = 0 ;
           j = 1;
           for (size_t i = 1; i <= 10; i++) {
               sum += a[i] * i;
               if (a[i]) {
                   w[j] = i;
                   n[j] = a[i];
                   j ++;
               }
           }
           printf("#%d:",t );
           if(sum % 2 == 1)
                printf("Can't be divided.\n" );
            else
            {
                V = sum / 2;
                memset(f,0,sizeof(f));
                for (size_t i = 1; i < j; i++) {
                    MultiplePack(w[i],w[i],n[i]);
                }
                if (f[V] == V)
                    printf("Can be divided.\n");
                else
                    printf("Can't be divided.\n");
            }
            printf("\n" );
            t++;
        /* code */
    }
    return 0;
}