7-1 单调递增最长子序列设计一个O(n2)时间的算法,找出由n个数组成的序列的最长单调递增子序列。输入格式:输入有两行: 第一行:n,代表要输入的数列的个数 第二行:n个数,数字之间用空格格开输出格式:最长单调递增子序列的长度输入样例:在这里给出一组输入。例如:51 3 5 2 9输出样例:在这里给出相应的输出。例如:4
2 回答
函数式编程
TA贡献1807条经验 获得超9个赞
#include <stdio.h> #define MAX_N 1000 int dp[MAX_N], a[MAX_N]; int n; void input() { scanf("%d", &n); for(int i = 0; i < n; ++i) scanf("%d", &a[i]); } int max_(int a, int b) { return a > b ? a : b; } void slove() { //注意要res保存结果 int res = 0; for(int i = 0; i < n; ++i) { for(int j = 0; j < i; ++j) if(a[j] < a[i]) dp[i] = max_(dp[i], dp[j] + 1); res = max_(dp[i], res); } printf("%d\n", res + 1); } int main() { input(); slove(); return 0; }
- 2 回答
- 0 关注
- 1222 浏览
添加回答
举报
0/150
提交
取消