/*
* 好奇怪的母函数
*/
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
#define max 100*100+10
int c1[max],c2[max],a[max];
int main(){
int n;
while(~scanf("%d",&n)){
int sum=0;
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
sum+=a[i];
}
sort(a,a+n);
for(int i=0;i<=sum;i++){
c1[i]=c2[i]=0;
}
for(int i=0;i<=a[0];i+=a[0]){
c1[i]=1;
}
for(int i=1;i<n;i++){
for(int j=0;j<=sum;j++){
for(int k=0;k+j<=sum&&k<=a[i];k+=a[i]){
c2[k+j]+=c1[j];
c2[abs(k-j)]+=c1[j];//每个砝码都可以放在两边
}
}
for(int j=0;j<=sum;j++){
c1[j]=c2[j];
c2[j]=0;
}
}
int cnt=0;
for(int i=1;i<=sum;i++){
if(!c1[i]){
cnt++;
}
}
printf("%d\n",cnt);
if(cnt){
int f=0;
for(int i=1;i<=sum;i++){
if(!c1[i]){
if(f){
printf(" ");
}
printf("%d",i);
f=1;
}
}
puts("");
}
}
}
转载于:https://www.cnblogs.com/Stomach-ache/p/3703235.html