首页 > 代码库 > 分辣条-01背包恰好装满情况
分辣条-01背包恰好装满情况
分辣条
发布时间: 2016年6月26日 20:36 最后更新: 2016年6月26日 20:37 时间限制: 1000ms 内存限制: 128M
“你喝的酸奶是我买的,辣条也是我买的,你现在要跟我分手,你把我当什么?”
“因为你每次分辣条的时候都比我多一根!”
可见分好辣条是一件多么重要的事情。。
现在有n(1<=n<=200)根辣条,每根辣条的重量为a1,a2...ai..an(1<=ai<=100)。
那么能不能把这些辣条分为重量相等的两份呢?
输入有多组数据。
每组数据第一行为一个整数n(1<=n<=200),n代表辣条的数量。
第二行有n个整数,a1,a2...ai..an,其中ai(1<=ai<=100)代表第i根辣条的重量
若能分成重量相等的两份,则输出"YES",否则输出"NO"每个答案占一行
复制
3 1 2 1 4 1 1 1 2
YES NO
01背包解决恰好装满情况,利用容积与价值相等。
#include<stdio.h> #include<string.h> int main() { int n,sum,i,j; int a[205],f[20005]; while(~scanf("%d",&n)){ sum=0; for(i=1;i<=n;i++){ scanf("%d",&a[i]); sum+=a[i]; } if(sum%2==1) printf("NO\n"); else{ sum/=2; memset(f,0,sizeof(f)); for(i=1;i<=n;i++){ for(j=sum;j>=0;j--){ if(j-a[i]>=0){ if(f[j-a[i]]+a[i]>f[j]) f[j]=f[j-a[i]]+a[i]; } } } if(f[sum]==sum) printf("YES\n"); else printf("NO\n"); } } return 0; }
分辣条-01背包恰好装满情况
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。