POJ1190
来源:互联网 发布:减肥晚上吃什么 知乎 编辑:程序博客网 时间:2024/05/22 06:09
刚开始做的时候把Hi>Hi+1忽略了,导致结果错误,而且剪枝不够彻底,要注意使用剩余的部分与当前结果相结合来剪枝。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class BirthdayCake2 {
static int[][] minvs;static int n;static int m;static int mins = 10000000;public static void main(String[] args) throws FileNotFoundException { // TODO Auto-generated method stub minvs = new int[21][2]; minvs[1][0] = 1; minvs[1][1] = 2; for (int i = 2; i < 21; i++) { minvs[i][0] = minvs[i - 1][0] + i * i * i; minvs[i][1] = minvs[i - 1][1] + 2 * i * i; } @SuppressWarnings("resource") Scanner sc = new Scanner(System.in); sc = new Scanner(new File("files/birthdaycake")); n = sc.nextInt(); m = sc.nextInt(); for (int i = 71; i >= m; i--) { for (int j = 30; j >= m; j--) { if (n - i * i * j >= 0) dfs(i, j, n - i * i * j, m - 1, i * i + 2 * i * j); } } if (mins == 10000000) System.out.println(0); else System.out.println(mins);}private static void dfs(int prer, int preh, int nn, int mm, int cs) { // TODO Auto-generated method stub if (mm == 0) { if (nn == 0 && cs < mins) mins = cs; return; } if (nn <= 0 || cs + minvs[mm][1] >= mins || 2 * nn / prer + cs >= mins || nn < minvs[mm][0]) return; if (mm == 1) { if ((prer - 1) * (prer - 1) * (preh - 1) < nn) return; for (int r = prer - 1; r > 0; r--) { if (nn % (r * r) == 0 && nn / (r * r) < preh) if (cs + 2 * nn / r < mins) { mins = cs + 2 * nn / r; break; } } } else { for (int i = prer - 1; i >= mm; i--) { for (int j = preh - 1; j >= mm; j--) { dfs(i, j, nn - i * i * j, mm - 1, cs + 2 * i * j); } } }}
}
sample input:
10000
8
sample output:
1532
0 0
- POJ1190
- POJ1190
- POJ1190
- poj1190 生日蛋糕
- poj1190生日蛋糕
- poj1190生日蛋糕
- poj1190 生日蛋糕
- POJ1190-生日蛋糕
- POJ1190生日蛋糕
- poj1190 生日蛋糕
- poj1190 神剪枝啊
- 北大ACM poj1190
- poj1190 生日蛋糕 dfs
- poj1190 生日蛋糕 搜索+剪枝
- poj1190深搜 生日蛋糕
- POJ1190(搜索加剪枝)
- POJ1190生日蛋糕题解
- POJ1190 生日蛋糕(DFS)
- 分布式消息系统:Kafka
- 操作系统小结
- Hadoop 查看SequenceFile
- java的编译和运行
- JavaScript 求两个时间的天数差
- POJ1190
- madplay 命令
- 【学习笔记】centos6.5svn服务器搭建
- 一进入页面选中第一个按钮,并展示按钮下的数据
- Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
- Python错误、调试及测试相关备忘
- SpringMVC + security模块 框架整合详解
- 十个值得一试的开源深度学习框架
- Android自定义一个属于自己的时间钟表