hdu1069

来源:互联网 发布:手机淘宝申请开店流程 编辑:程序博客网 时间:2024/06/06 00:32

高有3种,长比 宽长,于是每种矩形可以产生3种类型。

对矩形长款降序排序,就转换为最长递减序列问题了。可以用dp   O(n^2),也可以用dp+二分查找,就是二分查找是在不好写啊。数据比较少,直接dp吧。

import java.util.Arrays;import java.util.Scanner;class rectangle  implements Comparable{    int len;int wid;int hig;public rectangle(int len,int wid,int hig){this.len=len;this.wid=wid;this.hig=hig;}public int compareTo(Object o) {int temp1 =((rectangle)o).len-len; if(temp1!=0)return temp1;int temp2=((rectangle)o).wid-wid;return temp2;}}public class Main {public static void  main(String[] args){Scanner cin=new Scanner(System.in);int t=1;while(cin.hasNext()){int k=0,max=0;int n=cin.nextInt();if(n==0)return;int d[]=new int[3];int dp[]=new int[3*n];rectangle[] rec=new rectangle[3*n];for(int i=0;i<n;i++){for(int j=0;j<3;j++)d[j]=cin.nextInt();Arrays.sort(d);rec[k++]=new rectangle(d[2], d[1], d[0]);rec[k++]=new rectangle(d[2], d[0], d[1]);rec[k++]=new rectangle(d[1], d[0], d[2]);}Arrays.sort(rec, 0, k);dp[0]=rec[0].hig;for(int i=1;i<3*n;i++){dp[i]=rec[i].hig;for(int j=0;j<i;j++){if(rec[i].len<rec[j].len&&rec[i].wid<rec[j].wid && dp[i]<dp[j]+rec[i].hig){dp[i]=dp[j]+rec[i].hig;}}max=Math.max(max, dp[i]);}System.out.println("Case "+(t++)+": maximum height = "+max);}}}