杭电OJ1069java实现

杭电1069题目链接
思路:建立类包含高,长,宽。(长的为长,在构造函数中默认比较),面积(也可以不需要直接长长,宽宽比较),按照面积从小到大排序(如果没有面积按照长)。dp[i]表示以第i个为截至的最大高度dp[i]=dp[j] kuai[i].heght.(j表示小于i的最大高度那个),没输入三个数默认增加三个数据。类似最长子序列的dp;
代码如下:

import java.util.Scanner;
public class 杭电1069 {
	public static void main(String[] args) {	
	       Scanner sc=new Scanner(System.in);
	       int time=0;
	       while(sc.hasNext())
	       {
	    	   time  ;
	    	   int n=sc.nextInt();//测试用例
	    	   if(n==0)break;
	    	   kuai k[]=new kuai[n*3 1];
	    	   int dp[]=new int[n*3 1];
	    	   int value=0;
	    	   for(int i=0;i<n;i  )
	    	   {
	    		   int a1=sc.nextInt();
	    		   int a2=sc.nextInt();
	    		   int a3=sc.nextInt();
	    		   k[i*3 1]=new kuai(a1,a2,a3);
	    		   k[i*3 2]=new kuai(a2,a1,a3);
	    		   k[i*3 3]=new kuai(a3,a2,a1);
	    	   }
	    	   for(int i=1;i<n*3 1;i  )
	    	   {
	    		   for(int j=i;j<n*3 1;j  )
	    		   {
	    			   if(k[i].mianji>k[j].mianji)
	    			   {kuai team=k[i];k[i]=k[j];k[j]=team;}
	    		   }
	    	   }
	    	   dp[1]=k[1].heiht;//以第一个为截至
	    	   for(int i=1;i<n*3 1;i  )//以第i个为截止的dp
	    	   {
	    		   int max=0;
	    		   for(int j=1;j<i;j  )
	    		   {
	    			   if(k[j].chang<k[i].chang&&k[j].kuan<k[i].kuan)
	    			   { 
	    				   if(dp[j]>max) {max=dp[j];}
	    			   }
	    		   }
	    		   dp[i]=max k[i].heiht;
	    		   if(dp[i]>value)
	    		   {
	    			   value=dp[i];
	    		   }
	    	   }
	    	   System.out.println("Case " time ": maximum height = "  value);
//	    	   for(int i=0;i<n*3;i  )//测试
//	    	   {
//	    		   System.out.println(k[i].heiht " " k[i].chang " " k[i].kuan " " k[i].mianji);
//	    	   }
	       }	       
	}
}
class kuai
{
    int heiht;
    int chang;
    int kuan;
    int mianji;
    public kuai(int a,int b,int c)
    {
    	this.heiht=a;
    	this.chang= b>c?b:c;
    	this.kuan=b<c?b:c;
    	this.mianji=b*c;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员bigsai

喝杯咖啡压压惊!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值