zoukankan      html  css  js  c++  java
  • 最长单调递增子数列

    设辅助数组b,定义b[i]表示以a[i]为结尾的最长递增子数列的长度。则:

    转移方程:

    b[1]=1;

    b[i]=max{b[k]+1};    1=<i<=n,  1=<k<i  且

    #include<iostream>
    #include<algorithm>
    #define MAX 100
    using namespace std;
    int main(){
    	int a[MAX],b[MAX],visit[MAX];
    	int n;
    	while(cin>>n){
    		int max=0,v=0;
    		memset(a,0,sizeof(a));
    		memset(b,0,sizeof(b));
    		memset(visit,0,sizeof(visit));
    		for(int i=1;i<=n;i++){
    			cin>>a[i];
    		}
    		b[1]=1;
    		for(int i=2;i<=n;i++){
    			max=0;
    			for(int k=1;k<i;k++){
    				if(a[k]<a[i])
    					if(b[k]>max){
    						max=b[k];
    						v=k;
    					}
    			}
    			b[i]=max+1;
    			visit[v]=1;
    		}
    		
    		sort(b+1,b+n);
    		cout<<b[n]<<endl;
    		
    	}
    
    	return 0;
    }
    

      

    a[k]<a[i];

  • 相关阅读:
    栈和队列
    链表
    map
    二叉平衡树旋转
    二叉排序树详情
    红黑树详情
    查并集
    动态规划
    位操作
    字典树
  • 原文地址:https://www.cnblogs.com/wintersong/p/4964790.html
Copyright © 2011-2022 走看看