#include <bits/stdc++.h>
using namespace std;
int n,c1[1001],c2[1002],g[1002],zl[100000];
int main(){
while(cin>>n){
int sum=0;
for(int i=0;i<=n;i++){
c1[i]=0;
c2[i]=0;
cin>>g[i];
sum+=g[i];
}
for(int i=0;i<=n;i++) c1[i]=1;
for(int i=2;i<=n;i++){
//cout<<"yzlssb"<<endl;
for(int j=0;j<=n;j++){//cout<<"yzlssb"<<endl;
for(int k=0;k+j<=n;k+=g[i]){
c2[j+k]+=c1[j];
c2[abs(j-k)]+=c1[j];
zl[j+k]=0;//cout<<"yzlssb"<<endl;
zl[abs(j-k)]=0;
}
}
for(int j=0;j<=n;j++){
c1[j]=c2[j];
c2[j]=0;
}
}
cout<<c1[n]<<endl;
for(int i=0;i<sum;i++){
if(zl[i]!=0){
cout<<i<<" ";
}
}
}
return 0;
}
有一个天平和一些砝码,你现在想用它来对一些药品称重。
假设所有的砝码重量总和为S,请问在[1,S]范围内,有哪些重量是不能称重的。
特别说明:砝码可以放在天平的任意一端。
输入
输入包含多组测试数据。
每组测试数据首先是一个正整数N (1<=N<=100),表示有N种砝码;
接下来一行的N个整数Ai (1<=i<=N),表示砝码的重量;
其中, 1<=Ai<=100。
输出
对于每组测试数据,首先请在一行内输出一个整数M,表示有M种重量不能称出;
如果M不为0,接下来一行是M个不能称重的数量(从小到大输出)。
样例
输入
3
1 2 4
3
9 2 1
输出
0
2
4 5