http://poj.org/problem?id=1014

Description

Marsha and Bill own a collection of marbles. They want to split the collection among themselves so that both receive an equal share of the marbles. This would be easy if all the marbles had the same value, because then they could just split the collection in half. But unfortunately, some of the marbles are larger, or more beautiful than others. So, Marsha and Bill start by assigning a value, a natural number between one and six, to each marble. Now they want to divide the marbles so that each of them gets the same total value. Unfortunately, they realize that it might be impossible to divide the marbles in this way (even if the total value of all marbles is even). For example, if there are one marble of value 1, one of value 3 and two of value 4, then they cannot be split into sets of equal value. So, they ask you to write a program that checks whether there is a fair partition of the marbles.

Input

Each line in the input file describes one collection of marbles to be divided. The lines contain six non-negative integers n1 , . . . , n6 , where ni is the number of marbles of value i. So, the example from above would be described by the input-line "1 0 1 2 0 0". The maximum total number of marbles will be 20000. 
The last line of the input file will be "0 0 0 0 0 0"; do not process this line.

Output

For each collection, output "Collection #k:", where k is the number of the test case, and then either "Can be divided." or "Can't be divided.". 
Output a blank line after each test case.

Sample Input

1 0 1 2 0 0
1 0 0 0 1 1
0 0 0 0 0 0

Sample Output

Collection #1:
Can't be divided. Collection #2:
Can be divided.

大致题意:

有分别价值为1,2,3,4,5,6的6种物品,输入6个数字,表示相应价值的物品的数量,问一下能不能将物品分成两份,使两份的总价值相等,其中一个物品不能切开,只能分给其中的某一方,当输入六个0是(即没有物品了),这程序结束,总物品的总个数不超过20000

输出:每个测试用例占三行:

第一行: Collection #k: k为第几组测试用例

第二行:是否能分(具体形式见用例)

第三行:空白(必须注意,否则PE)

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
int dp[],w[],v[];
int V,K=;
void wpack(int w)
{
for(int i=w; i<=V; i++)
{
if(dp[i-w]+w>dp[i])
dp[i]=dp[i-w]+w;
}
}
void pack1(int w)
{
for(int i=V; i>=w; i--)
{
if(dp[i-w]+w>dp[i])
dp[i]=dp[i-w]+w;
}
}
void Mul(int w,int num)
{
if(w*num>=V)
{
wpack(w);
return ;
}
int k=;
while(k<num)
{
pack1(k*w);
num-=k;
k=k*;
}
pack1(num*w);
}
int main()
{
while(scanf("%d%d%d%d%d%d",&w[],&w[],&w[],&w[],&w[],&w[])!=EOF)
{
K++;
V=w[]+w[]+w[]+w[]+w[]+w[];
if(V==) break;
V=w[]*+w[]*+w[]*+w[]*+w[]*+w[]*;
if(V%==)
{
printf("Collection #%d:\n",K);
printf("Can't be divided.\n\n");
}
else
{
V=V/;
memset(dp,,sizeof(dp));
for(int i=; i<=; i++)
{
Mul(i,w[i]);
}
if(dp[V]==V)
{
printf("Collection #%d:\n",K);
printf("Can be divided.\n\n");
}
else
{
printf("Collection #%d:\n",K);
printf("Can't be divided.\n\n");
}
}
}
return ;
}

最新文章

  1. C#的互操作性:缓冲区、结构、指针
  2. CSS 单行溢出文本显示省略号...的方法(兼容IE FF)(转)
  3. 初识Hibernate 缓存
  4. Less/Sass编译工具,koala使用指南
  5. 部分android手机CCEditBox输入之后键盘输入框不消失得问题
  6. (转) ICML2016 TUTORIAL参会分享
  7. Maven+Spring+Mybatis+Security+Mysql简短的框架
  8. 安装ADT
  9. 泛泰A870刷4.4专用英文版非触摸CWM Recovery 6.0.4.8(三版通刷)
  10. Hibernate中HQL的日期差值计算,可计算相差多少秒
  11. Windows Phone开发(16):样式和控件模板
  12. 【web前端开发】浏览器兼容性处理
  13. 用HttpClientFactory来实现简单的熔断降级
  14. python实现使用词云展示图片
  15. 安装vue脚手架和vue安装element-ui
  16. [福大软工] Z班 第7次成绩排行榜
  17. reactjs中使用高德地图计算两个经纬度之间的距离
  18. Intellij IDEA使用spring-boot-devtools无效解决办法(2018年3月9日11:46:00)
  19. Haproxy 重定向跳转设置 - 运维小结
  20. Style、ControlTemplate 和 DataTemplate 触发器

热门文章

  1. echarts.js多图表数据展示使用小结
  2. 【大数据系列】基于MapReduce的数据处理 SequenceFile序列化文件
  3. 法律&amp;道德
  4. 原生js--键盘事件
  5. 为android编译libsocket的脚本
  6. 解决Win7启动时出现“windows未能启动。原因可能是最近更改了硬件或软件”的问题
  7. js 判断数组重复元素以及重复的个数
  8. Sublime text3配置LiveReload 浏览器即时刷新
  9. MFC创建好的对话框如何移植到新程序中
  10. yii---进行接受参数