首页 > 代码库 > hdu 1709 The Balance(母函数)

hdu 1709 The Balance(母函数)

题意:

有一个天平。有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;}

 

hdu 1709 The Balance(母函数)