最长单调递增子数列
设辅助数组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];