标签:
Description
Input
Output
Sample Input
Sample Output
c[j] |= b[j];//c【】,b【】,有一个为1 就成立,不加a【】的情况
if(j+a[i]<=sum)
c[j+a[i]]+=b[j];//加a【】
c[(int)abs(j-a[i])]+=b[j];//两个砝码的差
#include<cstdio> #include<cstring> #include<cmath> using namespace std; int main() { int t,a[105],i,j,sum; int b[10005],c[10005]; while(scanf("%d",&t)!=-1) { sum=0; for(i=1;i<=t;i++) { scanf("%d",&a[i]); sum+=a[i]; } memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); b[0]=1; b[a[1]]=1; for(i=2;i<=t;i++) { for(j=0;j<=sum;j++) { c[j] |= b[j];//c【】,b【】,有一个为1 就成立,不加a【】的情况 if(j+a[i]<=sum) c[j+a[i]]+=b[j];//加a【】 c[(int)abs(j-a[i])]+=b[j];//两个砝码的差 } memcpy(b,c,sizeof(c)); memset(c,0,sizeof(c)); } j=0; for(i=1;i<=sum;i++) if(b[i]==0) c[j++]=i; printf("%d\n",j); if(j) { printf("%d",c[0]); for(i=1;i<j;i++) printf(" %d",c[i]); printf("\n"); } } return 0; }
标签:
原文地址:http://www.cnblogs.com/demodemo/p/4732591.html