zoj1149 Dividing 动态规划
来源:互联网 发布:javascript长度函数 编辑:程序博客网 时间:2024/06/03 16:58
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 describes one collection of marbles to be divided. The lines consist of six non-negative integers n1, n2, ..., 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 colletcion, 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.
import java.io.BufferedInputStream;import java.io.PrintWriter;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.Scanner;public class Main {public static void main(String[] args) {new Task().solve();}}class Task {Scanner in = new Scanner(new BufferedInputStream(System.in)) ;PrintWriter out = new PrintWriter(System.out);void split(int n , int b , List<Integer>nums){int k = 1 ;while(n - k > 0){nums.add(k*b) ;n -= k ;k *= 2 ;}if(n > 0){nums.add(n*b) ;}}boolean judge(int sum , List<Integer> nums){boolean[] dp = new boolean[sum+1] ;Arrays.fill(dp, false) ;dp[0] = true ;for(int i : nums){for(int j = sum ; j >= i ; j--){if(dp[j-i]){dp[j] = true ;}}}return dp[sum] ;}void solve(){int cas = 1 ;while(true){ List<Integer> nums = new ArrayList<Integer>() ; int sum = 0 ; for(int i = 1 ; i <= 6 ; i++){ int k = in.nextInt() ; split(k , i, nums) ; sum += i * k ; } if(sum == 0){ break ; } out.println("Collection #" + cas++ + ":"); if(sum % 2 == 0 && judge(sum/2, nums)){ out.println("Can be divided.") ; } else{ out.println("Can't be divided.") ; } out.println() ;}out.flush(); }}
- zoj1149 Dividing 动态规划
- zoj1149-Dividing
- Hdu1059 - Dividing - 动态规划
- 动态规划 :POJ 1014 Dividing
- poj 1014 Dividing-动态规划
- UVA562 Dividing coins 动态规划
- ZOJ1149 POJ1014 HDU1059 Dividing,多重背包问题
- ZOJ1149
- 动态规划(acm pku 1014 Dividing)
- 【POJ1014】Dividing (动态规划,多重背包)
- poj1014 Dividing 动态规划 多重背包问题
- 动态规划入门——Dividing
- 动态规划--模板--hdu 1059 Dividing
- 动态规划 UVA - 562 Dividing coins
- 【动态规划】【多重背包】[HDU 1059]Dividing
- 暑假- 动态规划 I-(T - Dividing)
- Dividing (多重背包 动态规划)
- Pku acm 1014 Dividing 动态规划题目解题报告(十七)
- Android源码-高质量开发库
- 【c语言】打开一个客户端socket描述符
- 包装类和正则表达式
- 图像增强(直方图均衡化、拉普拉斯、Log、Gamma)
- 控制开关的printf
- zoj1149 Dividing 动态规划
- RB_tree的插入
- HBase 源码中增加jmx数据收集
- 湃睿科技公开课圆满成功
- 迷迷糊糊很多年的js原型链
- 石子归并1-3 区间dp,四边形不等式优化,GarsiaWachs算法
- springboot与mybatis整合 实例详解(完美融合)
- 虚拟机下的linux安装git
- OD修改MessageBox的显示