1、最长上升子序列(Longest increasing subsequence)ios
状态(最关键):f[N]为动规数组,f[i]表示从第一个字符开始,以a[i]为最后一个字符的序列的最长递增子序列的长度。数组
由状态引出状态转移方程,由于f[i]的设定,因此能够去比较最后一个字符从而更新f[i];spa
例题:POJ2533 Longest Ordered Subsequencecode
AC代码blog
#include<iostream> #include<algorithm> using namespace std; int main() { int f[1005]; int a[1005]; int n; cin >> n; for (int i = 0; i < n; i++)cin >> a[i]; f[0] = 1; for (int i = 1; i < n; i++) { f[i] = 1; for (int j = 0; j < i; j++) { if (a[j] < a[i])f[i] = max(f[i], f[j] + 1); } } int ans = 1; for (int i = 0; i < n; i++)ans = max(ans, f[i]); cout << ans << endl; return 0; }