先说最简单的做法:
一种是最常见的dp方法,令f[i]表示以A[i]元素结尾的LIS长度,那么,F[i]=max{F[j]+1) 其中1<=j<i,A[j]<A[i],边界是初始化F[i]=1,复杂度O(n^2)。
#include <cstdio> #include <algorithm> using namespace std; #define FOR(i,a,b) for(int i=(a);i<=(b);++i) int n, a[1005], f[1005]; int main () { scanf("%d", &n); FOR(i, 1, n) scanf("%d", &a[i]), f[i] = 1; FOR(i, 1, n) FOR(j, 1, i - 1) if (a[j] < a[i]) f[i] = max(f[i], f[j]