zoukankan      html  css  js  c++  java
  • CF4D Mysterious Present(二维LIS)

    CF4D Mysterious Present(二维LIS)

    原题链接

    思路:

    一维的话考虑n^2和nlogn两种写法,二维的话先对第一维进行排序,再对第二位做LIS。

    注意是严格单调上升子序列

    代码:

    const int maxn=5100;
    struct node{
    	int w,h,id;
    }a[maxn];
    int ww,hh,n,cnt=0;
    int dp[maxn],pre[maxn];
    bool cmp(node a,node b){
    	if(a.w==b.w) return a.h<b.h;
    	return a.w<b.w;
    }
    void dfs(int pos){
    	if(pos==-1) return ;
    	dfs(pre[pos]);
    	cout<<a[pos].id<<" ";
    }
    int main(){
    	cin>>n>>ww>>hh;
    	memset(pre,-1,sizeof pre);
    	for(int i=1;i<=n;i++){
    		int w,h;cin>>w>>h;
    		if(w<=ww||h<=hh) continue;
    		a[++cnt]={w,h,i};
    	}
    	sort(a+1,a+1+cnt,cmp);
    	for(int i=1;i<=cnt;i++){
    		dp[i]=1;
    		for(int j=1;j<i;j++){
    			if(a[j].w<a[i].w&&a[j].h<a[i].h&&dp[j]+1>dp[i]){
    				 dp[i]=dp[j]+1;
    				 pre[i]=j;
    			}
    		}
    	}
    	int res=0,pos=-1;
    	for(int i=1;i<=cnt;i++)
    		if(dp[i]>res) res=dp[i],pos=i;
    	cout<<res<<endl;
    	dfs(pos);
    	return 0;
    }
    
    
    
    
    
    
    
    
  • 相关阅读:
    stl
    Chopsticks Hdu1500
    Dp Hdu1421 搬寝室
    AOj448有趣的矩阵
    树状数组Hdu1541
    树状数组Hdu1166
    Floyd最小环Hdu1599
    三大主流ETL工具选型
    ETL概述
    POI操作Excel常用方法总结
  • 原文地址:https://www.cnblogs.com/OvOq/p/14706648.html
Copyright © 2011-2022 走看看