hdu 1690 The Balance_母函数

题意:给你n个数,这些数可以互相加或者减,输出在范围【1,sum】里不能通过运算得出的数

思路:套母函数模版 

#include <iostream>
#include<cstdio>
using namespace std;
#define N 110
int a[N],c1[10010],c2[10010],v[10010]; 
int main(int argc, char** argv) {
	int n,sum,i,j,k,ans;
	while(scanf("%d",&n)!=EOF){
		sum=0;
		ans=0;
		for(i=0;i<n;i++){
			scanf("%d",&a[i]);
			sum+=a[i];
		}
		for(i=0;i<=sum;i++){
			c1[i]=0;
			c2[i]=0;
		}
		for(i=0;i<=a[0];i+=a[0])
			c1[i]=1;
		for(i=1;i<n;i++){
			for(j=0;j<=sum;j++){
				for(k=0;k+j<=sum&&k<=a[i];k+=a[i]){
					if(k>=j)
						c2[k-j]+=c1[j];
					else
						c2[j-k]+=c1[j];
					c2[j+k]+=c1[j];
				}
					
			}
			for(j=0;j<=sum;j++){
				c1[j]=c2[j];
				c2[j]=0;
			}
		}
		for(i=1;i<=sum;i++)
			if(!c1[i])
				v[ans++]=i;
		
		printf("%d\n",ans);
		if(ans){
			for(i=0;i<ans-1;i++)
				printf("%d ",v[i]);
			printf("%d\n",v[i]);
		}
	}
	return 0;
}


posted @ 2014-01-24 21:29  Teemo的技术blog  阅读(69)  评论(0编辑  收藏  举报