分木棍(简单背包)

将若干个长度不同的木棍,分成A堆和B堆,并且保证A堆所有木棍的长度之和等于B堆所有木棍的长度之和。

输入

输入数据有多组。

每组测试数据第一行为一个正整数n(n<=100),代表总的木棍个数;

第二行为n个以空格隔开的正整数ci(ci<=100)。

输出

如果n根木棍可以分成两堆木棍(A堆和B堆),并且A堆所有木棍的长度之和等于B堆所有木棍的长度之和,则输出"Yes" ,否则输出"No"(A堆和B堆中的木棍个数不必相等)。

#include<stdio.h>
#include<string.h>
int main()
{
    int a[101],b[10001],n,i,sum,j;
    while(scanf("%d",&n)!=EOF)
    {
        sum=0;
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
            sum+=a[i];
        }
        if(sum%2) printf("No\n");
        else
        {
            memset(b,0,sizeof(b));
            int f=0;
            for(i=0;i<n;i++)
            {
                for(j=sum/2;j>=a[i];j--)
                if(b[j-a[i]]+a[i]>b[j]) b[j]=b[j-a[i]]+a[i]; //dp简单背包
            }

            for(i=0;i<=sum/2;i++)
            if(b[i]==sum/2) f=1;//检查是否存在
            if(f) printf("Yes\n");
            else printf("No\n");
        }
    }
}

原文地址:https://www.cnblogs.com/mayouyou/p/9159735.html

时间: 2024-08-09 13:38:14

分木棍(简单背包)的相关文章

Unity3D使用NGUI实现简单背包功能

前话 在许多类型游戏中我们经常会使用到背包,利用背包来设置相应角色属性,多了背包也会让游戏增色拓展不少. 那在Unity3D游戏开发中该如何编写背包系统呢?因为有高人开发了NGUI插件,因此我们进行简单编写代码设置即可实现一个简单的背包功能了. 准备工作 新建一个工程PackageDemo 导入NGUI包(最新版3.9.8版的正版89刀) 准备好图片素材,使用NGUI将其打包成图集 背包 背包格子 物品 简单背包功能实现 第一步,添加NGUI控件,使用素材 项目目录以及场景列表如下: 要注意的是

分辣条-01背包恰好装满情况

分辣条 发布时间: 2016年6月26日 20:36   最后更新: 2016年6月26日 20:37   时间限制: 1000ms   内存限制: 128M 描述 "你喝的酸奶是我买的,辣条也是我买的,你现在要跟我分手,你把我当什么?" "因为你每次分辣条的时候都比我多一根!" 可见分好辣条是一件多么重要的事情.. 现在有n(1<=n<=200)根辣条,每根辣条的重量为a1,a2...ai..an(1<=ai<=100). 那么能不能把这些

一、mysql分表简单介绍

一.Mysql分表的原因 1.当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了. 分表的目的就在于此,减小数据库的负担,缩短查询时间. 2.mysql中有一种机制是表锁定和行锁定,为什么要出现这种机制,是为了保证数据的完整性, 我举个例子来说吧,如果有二个sql都要修改同一张表的同一条数据,这个时候怎么办呢,是不是二个sql都可以同时修改这条数据呢? 很显然mysql对这种情况的处理是,一种是表锁定(myisam存储引擎),一个是行锁定(innod

分库分表-简单总结

前言 常用的数据有oracle和mysql: oracle费用高,性能高,一个oracle相当于10到30个mysql: 但是面临海量数据,oracle仍不够,分库分表的难度大: 分库分表针对于mysql: 解决性能问题,需将数据或操作分离,mysql官方提供了读写分离的插件:proxyg: 读写分离,日志同步,解决了高并发问题,单没有解决高可用: 单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 随

PAT 甲级 1027 Colors in Mars (20 分)(简单,进制转换)

1027 Colors in Mars (20 分) People in Mars represent the colors in their computers in a similar way as the Earth people. That is, a color is represented by a 6-digit number, where the first 2 digits are for Red, the middle 2 digits for Green, and the

PAT 甲级 1036 Boys vs Girls (25 分)(简单题)

1036 Boys vs Girls (25 分) This time you are asked to tell the difference between the lowest grade of all the male students and the highest grade of all the female students. Input Specification: Each input file contains one test case. Each case contai

PAT 甲级 1041 Be Unique (20 分)(简单,一遍过)

1041 Be Unique (20 分) Being unique is so important to people on Mars that even their lottery is designed in a unique way. The rule of winning is simple: one bets on a number chosen from [1]. The first one who bets on a unique number wins. For example

PAT 甲级 1058 A+B in Hogwarts (20 分) (简单题)

1058 A+B in Hogwarts (20 分)   If you are a fan of Harry Potter, you would know the world of magic has its own currency system -- as Hagrid explained it to Harry, "Seventeen silver Sickles to a Galleon and twenty-nine Knuts to a Sickle, it's easy enou

PAT 数列求和-加强版&#160;&#160;&#160;(20分)(简单模拟)

给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+?+AA?A(N个A).例如A=1, N=3时,S=1+11+111=123 输入格式: 输入数字A与非负整数N. 输出格式: 输出其N项数列之和S的值. 输入样例: 1 3 输出样例: 123 1 #include<cstdio> 2 #include<iostream> 3 #include<algorithm> 4 #include<cmath> 5 #i