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