import java.util.ArrayList;
import java.util.List;
import java.util.Scanner; public class Main { List<Block> blocks = null; public void inital(){
Scanner cin = new Scanner(System.in);
int n;
int m = 1;
while((n = cin.nextInt()) != 0){
blocks = new ArrayList<Block>();
for(int i = 0; i < n; i++){
int x = cin.nextInt();
int y = cin.nextInt();
int h = cin.nextInt(); if(x == y){
//x == y == z一种
if(y == h)
blocks.add(new Block(x, y, h, h));
//x == y != z三种
else {
blocks.add(new Block(x, x, h, h));
blocks.add(new Block(h, x, x, x));
blocks.add(new Block(x, h, x, x));
}
}
else{
//x == h != y三种
if(x == h){
blocks.add(new Block(x, x, y, y));
blocks.add(new Block(y, x, x, x));
blocks.add(new Block(x, y, x, x));
}
else if(y == h ){
blocks.add(new Block(x, y, y, y));
blocks.add(new Block(y, y, x, x));
blocks.add(new Block(y, x, y, y));
}
//x != y != h
else{
blocks.add(new Block(x, y, h, h));
blocks.add(new Block(x, h, y, y));
blocks.add(new Block(y, x, h, h));
blocks.add(new Block(y, h, x, x));
blocks.add(new Block(h, x, y, y));
blocks.add(new Block(h, y, x, x));
}
}
}
sort(blocks);
int maxH = 0;
for(int i = 0; i < blocks.size(); i++){
for(int j = 0; j < i; j++){
if(blocks.get(j).x < blocks.get(i).x && blocks.get(j).y < blocks.get(i).y){
blocks.get(i).dp = max((blocks.get(i).h + blocks.get(j).dp), blocks.get(i).dp);
}
maxH = max(blocks.get(i).dp, maxH);
}
}
System.out.println("Case " + (m++) + ": maximum height = " + maxH);
}
cin.close();
} public int max(int a, int b){
return a > b ? a : b;
} public void sort(List<Block> blocks){
boolean exchange;
for(int i = blocks.size() - 1; i > 0; i--){
exchange = false;
for(int j = 0; j < i; j++){
if(blocks.get(j).x > blocks.get(j+1).x ){
Block temp = blocks.get(j);
blocks.set(j, blocks.get(j+1));
blocks.set(j+1, temp);
exchange = true;
}
else if(blocks.get(j).x == blocks.get(j+1).x){
if(blocks.get(j).y > blocks.get(j+1).y){
Block temp = blocks.get(j);
blocks.set(j, blocks.get(j+1));
blocks.set(j+1, temp);
exchange = true;
}
}
}
if(!exchange){
return;
}
}
}
public static void main(String[] args) {
new Main().inital();
} class Block{
public int x;
public int y;
public int h;
public int dp;//dp指的是该块箱子放在最下面时此方案的最大的高度。
public Block(int x, int y, int h, int dp) {
this.x = x;
this.y = y;
this.h = h;
this.dp = dp;
} } }

最新文章

  1. Mac OS X下Sublime Text (V2.0.1)破解
  2. 重新想象 Windows 8 Store Apps (64) - 后台任务: 开发一个简单的后台任务
  3. codeforces 86D : Powerful array
  4. Linux系统如何查看CPU型号等
  5. 由单例模式学到:volatile关键字
  6. poi过滤操作后产生新的sheet
  7. 本原串(HDU 2197 快速幂)
  8. PHP系列目录
  9. maven(02)--简单的命令操作
  10. PAT甲级 1004 树
  11. spoj 1676 AC自动机+矩阵快速
  12. sql server 实现split功能 行转列
  13. [LeetCode&amp;Python] Problem 594. Longest Harmonious Subsequence
  14. 堆排序的Python实现
  15. PHP——emjoin表情存入数据库
  16. vue中v-show与v-if的区别
  17. oracle-ords
  18. 动态 hover 使用变相使用
  19. 我要带徒弟学写JAVA架构,引路架构师之路(Jeecg开源社区)
  20. Linux运维之shell脚本

热门文章

  1. .net core工具组件系列之Redis—— 第一篇:Windows环境配置Redis(5.x以上版本)以及部署为Windows服务
  2. eladmin-plus V2.0.0 发布,单表链式调用更丝滑
  3. WEB安全新玩法 [10] 防范竞争条件支付漏洞
  4. Apereo CAS 4.1 反序列化命令执行漏洞
  5. yum 卸载
  6. netty系列之:netty中的Channel详解
  7. 【网站公告】避免反对百度的限制措施:百度搜索过来的访问会自动禁用js权限
  8. Bypass D盾 Webshell
  9. 做Android开发怎么才能不被淘汰?
  10. 去除Windows-XP系统下的关机功能