首页 > 其他 > 详细

HDU 1709

时间:2014-10-05 11:46:38      阅读:325      评论:0      收藏:0      [点我收藏+]

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

相信自己

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define N 101
using 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

原文:http://www.cnblogs.com/jie-dcai/p/4006800.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!