求最长子序列(动态规划)
-
废话不多说,代码如下:
#include<bits/stdc++.h> using namespace std; const int N = 1010; int a[N], f[N]; int main(){ int n; scanf("%d", &n); for(int i = 1; i <= n; i ++) scanf("%d", a + i); for(int i = 1; i <= n; i ++){ f[i] = 1; for(int j = 1; j < i; j ++) if(a[j] < a[i]) f[i] = max(f[j] + 1, f[i]); } int res = 1; for(int i = 1; i <= n; i ++) res = max(res, f[i]); printf("%d", res); return 0; }
-
局部所有情况寻求最优解以达到全局最优解,仔细理解体会动态规划的核心思想。