首页 > 代码库 > HDU 1709

HDU 1709

MB,一开始就想到是不是只要加上一个不选择砝码的情况,但一直没动手做,因为看了看网上了,觉得总有点复杂,认为自己想错了。。。。

相信自己

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define N 101using namespace std;int c1[N*N],c2[N*N];int Fa[N],ans[N*N],ap;int main(){	int n,sum;	while(scanf("%d",&n)!=EOF){		sum=0;		for(int i=1;i<=n;i++){			scanf("%d",&Fa[i]);			sum+=Fa[i];		}		sort(Fa+1,Fa+n+1);		memset(c1,0,sizeof(c1));		memset(c2,0,sizeof(c2));		c1[0]=c1[Fa[1]]=1;		for(int i=2;i<=n;i++){			for(int j=0;j<=sum;j++){				for(int k=0;k<=Fa[i];k+=Fa[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;		}		ap=0;		for(int j=1;j<=sum;j++)		if(c1[j]==0){			ans[ap++]=j;		}		printf("%d\n",ap);		if(ap) printf("%d",ans[0]);		for(int i=1;i<ap;i++)		printf(" %d",ans[i]);		if(ap) printf("\n");	}	return 0;}

  

HDU 1709