QDUOJ 93 - 分辣条(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”每个答案占一行

样例输入1 复制
3
1 2 1
4
1 1 1 2
样例输出1
YES
NO

解题思路:
因为数据不大(200*100),所以直接用01背包.
把重量看做成重量和价值.

AC代码

#include<stdio.h>
#include<algorithm>
#include<memory.h>
using namespace std;
int qdu[205];
int dp[20005];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int sum = 0;
        for(int i = 0;i < n;i++)
        {
            scanf("%d",&qdu[i]);
            sum += qdu[i];
        }
        if(sum%2)   printf("NO\n");
        else
        {
            memset(dp,0,sizeof(dp));
            sum >>= 1;
            for(int i = 0;i < n;i++)
            {
                for(int j = sum;j >= 0;j--)
                {
                    if(j-qdu[i]>=0)
                        dp[j] = max(dp[j],dp[j-qdu[i]]+qdu[i]);
                }
            }
            if(dp[sum] == sum)     printf("YES\n");
            else                    printf("NO\n");
        }
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值