zoukankan      html  css  js  c++  java
  • NYOJ 16 矩形嵌套

    题目:矩形嵌套


    import java.util.Scanner;
    public class Main {//深搜超时---TimeLimitExceeded	 --	 --	java	2013-07-23 22:55:29
    	static F f[];
    	static int n,max;
    	public static void main(String[] args) {
    		Scanner input=new Scanner(System.in);
    		int N=input.nextInt();
    		while(N-->0){
    			n=input.nextInt();
    			max=0;
    			f=new F[n];
    			for(int i=0;i<n;i++){
    				int x=input.nextInt();
    				int y=input.nextInt();
    				f[i]=new F(x,y);
    			}
    			for(int i=0;i<n;i++){
    				f[i].ok=false;
    				dfs(f[i].wide,f[i].high,1);
    				f[i].ok=true;
    			}
    			System.out.println(max);
    		}
    	}
    	
    	private static void dfs(int wide, int high, int sum) {//递归深度搜索
    		if(sum>max)//记录最大值
    			max=sum;
    		for(int i=0;i<n;i++){
    			if(f[i].ok&&(f[i].wide<wide&&f[i].high<high||f[i].wide<high&&f[i].high<wide)){
    				f[i].ok=false;
    				dfs(f[i].wide,f[i].high,sum+1);
    				f[i].ok=true;
    			}
    		}
    	}
    }
    class F{//存储长和宽,以及是否被用过
    	int wide,high;
    	boolean ok=true;
    	F(int wide,int high){
    		this.wide=wide;
    		this.high=high;
    	}
    	F(){
    	}
    }



    import java.util.Scanner;
    public class Main{//动态规划,Accepted 47MS 739java2013-07-23 23:39:06
    	static int g[][],t[],n;
    	public static void main(String[] args) {
    		Scanner input=new Scanner(System.in);
    		int N=input.nextInt();
    		while(N-->0){
    			n=input.nextInt();
    			int a[]=new int[n];
    			int b[]=new int[n];
    			g=new int[n][n];
    			t=new int[n];
    			for(int i=0;i<n;i++){
    				a[i]=input.nextInt();
    				b[i]=input.nextInt();
    			}
    			for(int i=0;i<n;i++)
    	            for(int j=0;j<n;j++)
    	                if((a[i]>a[j]&&b[i]>b[j])||(a[i]>b[j]&&b[i]>a[j])) 
    	                    g[i][j]=1;
    			int max=-1;
    			for(int i=0;i<n;++i)
    	            if(dp(i)>max)
    	                max=dp(i);
    			System.out.println(max);
    			
    		}
    		
    	}
    	private static int dp(int i) {
    		
    		int ans=t[i];
    	    if(ans>0)
    	        return ans;
    	    ans=1;
    	    for(int j=0;j<n;++j)
    	        if(g[i][j]!=0)
    	            if(ans<dp(j)+1){
    	                ans=dp(j)+1;
    	                t[i]=ans;
    	            }
    	    return ans;
    	}
    }


  • 相关阅读:
    路由
    更改HTTP头信息
    laravel 笔记
    laraven安装记录
    虚拟机Centos设置静态IP
    关于正向代理,反向代理,负载均衡的个人理解
    exce族函数详解
    【C】多线程编程笔记
    【转】Linux C 网络编程——TCP套接口编程
    MySQL 用户管理及权限管理
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3211952.html
Copyright © 2011-2022 走看看