HDU1069 Monkey and Banana

题目大意

给定 n 种盒子, 每种盒子无限多个, 需要叠起来, 在上面的盒子的长和宽必须严格小于下面盒子的长和宽, 求最高的高度.

思路

对于每个方块, x, y, z 的全排列共有 6 种可能性, 每种可能性只需要一个方块, 因为方块必须严格小于, 若有两个相同的方块, 则不符合题意.

先将方块按照 x, y 依次进行排序

设 dp[i] 为第 i 个方块时的最高高度, 则每个方块的最高高度为 dp[i] = max(dp[j] + arr[i].z). 每次处理 i 时均默认该方块加入叠成的塔中, 对于后面的状态, 可以不选择这个状态.

代码

package 基础DP1;

import java.util.Arrays;
import java.util.Scanner; class Block implements Comparable<Block>{
int x, y, z;
Block(int _x, int _y, int _z) {
x = _x; y = _y; z = _z;
}
@Override
public int compareTo(Block arg0) {
if(x != arg0.x)
return x - arg0.x;
return y - arg0.y;
} }
public class HDU1069 { public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int round = 0;
while(true) {
int nBlock = in.nextInt();
if(0 == nBlock)
break;
Block[] arr = new Block[nBlock * 6 + 1];
for(int i = 1; i <= nBlock * 6; ) {
int x = in.nextInt();
int y = in.nextInt();
int z = in.nextInt();
arr[i++] = new Block(x, y, z);
arr[i++] = new Block(x, z, y);
arr[i++] = new Block(y, x, z);
arr[i++] = new Block(y, z, x);
arr[i++] = new Block(z, y, x);
arr[i++] = new Block(z, x, y);
}
Arrays.sort(arr, 1, arr.length);
int[] dp = new int[nBlock * 6 + 1];
int ans = 0;
for(int i = 1; i <= nBlock * 6; i++) {
// System.out.println("x is" + arr[i].x + " y is " + arr[i].y + " z is " + arr[i].z);
int maxHeight = 0;
for(int j = 1; j < i; j++) {
if(arr[j].x >= arr[i].x || arr[j].y >= arr[i].y)
continue;
maxHeight = Math.max(maxHeight, dp[j]);
}
dp[i] = maxHeight + arr[i].z;
ans = Math.max(ans, dp[i]);
} System.out.printf("Case %d: maximum height = %d", ++round, ans);
System.out.println();
}
} }

最新文章

  1. 将Apache手动安装成Windows的服务
  2. JRE与JDK的区别
  3. js1常用的东西
  4. 如何开发 Sublime Text 2 的插件
  5. POJ 3449 Geometric Shapes(判断几个不同图形的相交,线段相交判断)
  6. VM网络无法连接--提示ethernet0无法连接到虚拟网络
  7. Spring MVC(一)
  8. DownloadManager 版本更新,出现 No Activity found to handle Intent 的解决办法
  9. 自己整理的openresty安装步骤
  10. Dapper入门教程(一)——Dapper介绍
  11. 自学Zabbix3.6.4-触发器triggers dependencies依赖关系
  12. 算法-java代码实现计数排序
  13. mongodb3.0分片及java代码连接操作测试(开启用户验证)
  14. 杭电ACM2004--成绩转换
  15. 电路 - 基尔霍夫定律(KLL);节点流入电流等于流出电流。
  16. IDEA运行android项目一直是同一个apk
  17. OpenCV不同类型Mat的at方法访问元素时该如何确定模板函数的typename(转)
  18. 3DMAX 批量 场景 对象 导出 .X格式 脚本
  19. 怎样删除windows.old文件
  20. 124、@JavascriptInterface

热门文章

  1. oled屏幕配套取字模软件使用
  2. 121、Django rest framework入门使用
  3. nyoj 1208——水题系列——————【dp】
  4. springboot整合activeMq 跳坑
  5. java使用netty的模型总结
  6. 二、hadoop文件操作
  7. RegExp正则表达式内容
  8. 接收sql语句的返回值
  9. 设计模式之职责链模式(JAVA实现)
  10. javascript: iframe switchSysBar 左欄打開關閉,兼容各瀏覽器操作