POJ 2533

 最长上升子序列,最基础的题

 

f[x]表示以第x个元素开头,x元素一定在子序列内时的LIS长度。

 

f[x]= max( f[i] )+1,其中要满足a[i]>a[x]

 

所求是f[]中的最大值

 

#include <iostream> #define F(i,a,b) for (int i=a;i<=b;i++) using namespace std; int n, a[1001], f[1001]; int main() { cin >> n ; F(i,1,n) cin >> a[i]; f[n]=1; for (int i=n-1;i>=1;i--) { int Max=0; F(j,i+1,n) if (a[j]>a[i] && f[j]>Max) Max=f[j]; f[i]=Max+1; } int Max=0; F(i,1,n) if (f[i]>Max) Max=f[i]; cout << Max << endl; return 0; }

你可能感兴趣的:(POJ 2533)