根据题意,模板需要改的地方:
//因为是天平,所以还可以求差。
//因为每类砝
#include<bits/stdc++.h>
using namespace std ;
const int maxn=1e4+5;
int n,c1[maxn],c2[maxn],val[105],num[105],ans[maxn];
int main(){
while(cin>>n){
memset(c1,0,sizeof(c1));
memset(c2,0,sizeof(c2));
int sum=0;
for(int i=1;i<=n;i++){
cin>>val[i];
sum+=val[i];
num[i]=1;
}
for(int i=0;i<=num[1];i++){
c1[i*val[i]]=1;
}
for(int i=2;i<=n;i++){
for(int j=0;j<=sum;j++)
for(int k=0;k+j<=sum&&k<=num[i]*val[i];k+=val[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]){
ans[++cnt]=i;
}
cout<<cnt<<endl;
if(cnt) {
for(int i=1;i<cnt;i++)
cout<<ans[i]<<" ";
cout<<ans[cnt]<<endl;
}
}
return 0;
}
码只有一个,所以num均=1