首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。