标签:
题意:
有一个天平。有N个砝码。重量分别是A1...AN。
问重量【1..S】中有多少种重量是无法利用这个天平和这些砝码称出来的。
S是N个砝码的重量总和。
思路:
对于每一个砝码来说,有三种:不放,放左盘,放右盘。
额,,母函数和DP其实核心一样,,,,
看代码,,
代码:
int n; int aa[105]; bool a[10005], b[10005]; int temp[10005]; int main(){ while(scanf("%d",&n)!=EOF){ int tot=0; rep(i,1,n){ scanf("%d",&aa[i]); tot+=aa[i]; } mem(a,false); mem(b,false); a[0]=true; rep(i,1,n){ mem(b,false); rep(k,0,tot){ if(a[k]==true){ b[k]=true; if(k+aa[i]<=tot){ b[k+aa[i]]=true; } if(abs(k-aa[i])<=tot){ b[abs(k-aa[i])]=true; } } } rep(k,0,tot) a[k]=b[k]; } int ans=0; rep(i,0,tot){ if(a[i]==false){ temp[++ans]=i; } } printf("%d\n",ans); if(ans>0){ printf("%d",temp[1]); rep(i,2,ans) printf(" %d",temp[i]); cout<<endl; } } return 0; }
标签:
原文地址:http://www.cnblogs.com/fish7/p/4266541.html