最长上升子序列(代码实现)
2016-11-09 22:00
381 查看
经典问题,不在赘述
#include <cstdio> #include <cstring> const int maxn = 10000; //用maxlen[i]表示a[1], a[2],..., a[k]中最长上升子序列的长度 //那么状态转移方程为 //maxlen[1] = 1 //maxlen[i] = 1 + MAX{maxlen[j], 其中1 <= j < i, a[j] < a[i]}, (1 < i <= n) void init(int n, int *a, int *maxlen) { memset(maxlen, 0, sizeof(maxlen)); maxlen[1] = 1; for (int i = 2; i <= n; i++) { int tem = 0; for (int j = 1; j < i; j++) { if (a[j] < a[i] && tem < maxlen[j]) tem = maxlen[j]; } maxlen[i] = tem + 1; } return; } //寻找maxlen[maxn]中的最大值 int solve(int n, int *a, int *maxlen) { int ans = 0; for (int i = 1; i <= n; i++) if (ans < maxlen[i]) ans = maxlen[i]; return ans; } int main() { freopen("data.in", "r", stdin); int n; while (scanf("%d", &n) == 1) { int a[maxn], maxlen[maxn]; for (int i = 1; i <= n; i++) scanf("%d", a + i); init(n, a, maxlen); int ans = solve(n, a, maxlen); printf("%d\n", ans); } return 0; }
相关文章推荐
- Java实现-最长上升子序列
- 最长上升子序列LIS算法实现
- LIS 模板 (最长上升/下降子序列) STL实现
- C语言:最长上升子序列LIS算法实现
- 代码填空:LIS 最长上升子序列
- Java实现O(nlogn)最长上升子序列
- 最长上升子序列LIS算法实现
- “最长上升子序列,最大连续子序列和,最长公共子串”的Java实现
- 最长上升子序列LIS算法实现
- 最长上升子序列LIS算法实现
- 最长上升子序列O(n*lg(n))代码
- NYOJ - 760 - See LCS again(最长上升子序列O(N(logN)实现)
- “最长上升子序列,最大连续子序列和,最长公共子串”的Java实现
- 1759:最长上升子序列 3种实现(最长上升子序列)
- 最长上升子序列问题 nlogn 实现算法的简述
- 编程算法 - 最长上升子序列问题 代码(C)
- 编程算法 - 最长上升子序列问题 代码(C)
- 算法基础之python实现动态规划中数字三角形和最长上升子序列问题
- 最长上升子序列O(n*lg(n))代码
- 最长上升子序列的nlogn算法实现(用栈)