http://www.360doc.com/content/13/0601/00/8076359_289597587.shtml
key Point:
1 找到狀態
2 找到狀態轉移方程
初級例子:
一個序列有N個數:A[1],A[2],…,A[N],求出最長非降子序列的長度。
#include <iostream>
using namespace std;
int lis(int A[], int n){
int *d = new int[n];
int len = 1;
for(int i=0; i<n; ++i){
d[i] = 1;
for(int j=0; j<i; ++j)
if(A[j]<=A[i] && d[j]+1>d[i])
d[i] = d[j] + 1;
if(d[i]>len) len = d[i];
}
delete[] d;
return len;
}
int main(){
int A[] = {
5, 3, 4, 8, 6, 7
};
cout<<lis(A, 6)<<endl;
return 0;
}