POJ1014
来源:互联网 发布:雷盾网络验证山寨 编辑:程序博客网 时间:2024/06/08 17:31
题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1014
思路:类似背包的方法,不过可以先优化下,优化的方法:http://162.105.81.202/course/problemSolving/dividingProve.doc
也可以去http://www.blogjava.net/zellux/archive/2007/07/30/133416.html?P_AVPASS=PHDGBITAVPASSP看看C的解决方案
以及纯DP+剪枝的实现方法。
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- public class Main {
- public static void main(String[] args) throws IOException {
- BufferedReader read = new BufferedReader(new InputStreamReader(
- System.in));
- String[] s;
- int[] marbles;
- int sum;
- int part;
- int times = 0;
- while (true) {
- marbles = new int[6];
- sum = 0;
- s = read.readLine().split(" ");
- for (int i = 0; i < 6; i++) {
- marbles[i] = Integer.parseInt(s[i]);
- }
- if (marbles[5] > 5) {
- marbles[5] = 4 + marbles[5] % 2;
- }
- if (marbles[4] > 6) {
- marbles[4] = 6 - marbles[4] % 2;
- }
- if (marbles[3] > 5) {
- marbles[3] = 4 + marbles[3] % 2;
- }
- if (marbles[2] > 5) {
- marbles[2] = 4 + marbles[2] % 2;
- }
- if (marbles[1] > 4) {
- marbles[1] = 4 - marbles[1] % 2;
- }
- for (int i = 0; i < 6; i++) {
- sum += marbles[i] * (i + 1);
- }
- if (sum == 0) {
- break;
- }
- times++;
- System.out.printf("Collection #%d:/n", times);
- if (sum % 2 != 0) {
- System.out.println("Can't be divided.");
- System.out.println();
- continue;
- }
- part = sum / 2;
- if (search(part, marbles)) {
- System.out.println("Can be divided.");
- } else {
- System.out.println("Can't be divided.");
- }
- System.out.println();
- }
- }
- public static boolean search(int part, int[] marbles) {
- int[] flg = new int[part + 1];
- flg[0] = 1;
- for (int i = 0; i < 6; i++) {
- for (int j = 1; j <= marbles[i]; j++) {
- int base = j * (i + 1);
- if (base > part) {
- break;
- }
- for (int k = part - (i + 1); k >= base - i - 1; k--) {
- if (flg[k] != 0) {
- flg[k + i + 1] = 1;
- }
- if (flg[part] != 0) {
- return true;
- }
- }
- }
- }
- return flg[part] != 0;
- }
- }
- POJ1014
- poj1014
- poj1014
- poj1014
- poj1014
- poj1014
- poj1014
- poj1014
- POJ1014
- poj1014 - Dividing
- poj1014:Dividing
- POJ1014 Dividing
- poj1014 Dividing
- POJ1014 Dividing
- poj1014-Dividing
- POJ1014:Dividing
- poj1014 dfs
- POJ1014:Dividing
- 解读豆瓣的“指环王架构”
- PowerDesign跟数据库相连
- 如何避免表单的重复提交
- JFreeChart学习心得与例子
- Replace INTO与INSERT INTO
- POJ1014
- JFreeChart中文API
- 假期过了..
- HTML语法大全
- TipsExtend.exe 是什么进程?
- MySQL 存储过程(待更新)
- Java程序员要掌握的十个JSP中的标签库
- MySQL 随即查找(待更新)
- 一个牛人的经历(强烈建议做程序的看看,保证有启发)