题目:http://acm.hdu.edu.cn/showproblem.php?pid=1709
The Balance
Problem Description
Now you are asked to measure a dose of medicine with a balance and a number of weights. Certainly it is not always achievable. So you should find out the qualities which cannot be measured from the range [1,S]. S is the total quality of all the weights.
Input
The input consists of multiple test cases, and each case begins with a single positive integer N (1<=N<=100) on a line by itself indicating the number of weights you have. Followed by N integers Ai (1<=i<=N), indicating the quality of each weight where 1<=Ai<=100.
Output
For each input set, you should first print a line specifying the number of qualities which cannot be measured. Then print another line which consists all the irrealizable qualities if the number is not zero.
Sample Input
3 1 2 4 3 9 2 1
Sample Output
0 2 4 5
#include<stdio.h>
int main()
{
int c[2][10102];
int a[101];
int n,i,j,k,s;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int f=0;
s=0;
for(i=0;i<=200;i++)
{
c[0][i]=0;
c[1][i]=0;
}
c[0][0]=1;
c[0][a[0]]=1;
s+=a[0];
for(i=1;i<n;i++)
{
for(j=0;j<=s;j++)
for(k=-a[i];k<=a[i];k+=a[i])
if(k+j>=0)c[!f][k+j]+=c[f][j];
else c[!f][-(k+j)]+=c[f][j];
s+=a[i];
for(k=0;k<=s+100;k++)
c[f][k]=0;
f=!f;
}
int b[10009]={0};
j=0;
for(i=0;i<=s;i++)
{
if(c[f][i]==0)b[j++]=i;
}
printf("%d\n",j);
if(j)
{
printf("%d",b[0]);
for(i=1;i<j;i++)
printf(" %d",b[i]);
printf("\n");
}
}
return 0;
}