Description
名词解释:
一串数字比如1、5、3、6、9、8、10,它的子序列是从左到右不连续的若干个数,比如1、5、6,3、9、8、10都是它的子序列。
最长上升子序列即从左到右严格增长的最长的一个子序列,1、5、6、9、10就是这个序列的一个最长上升子序列。
给出若干序列,求出每个序列的最长上升子序列长度。
Input
多组数据,每组第一行正整数n,1 <= n <= 1000,第二行n个空格隔开的不大于1,000,000的正整数。
Output
每组数据输出一行,最长上升子序列的长度。
Sample Input
7 1 5 3 6 9 8 10
Sample Output
5
模板题,动态规划的最长上升子序列。
#include<iostream>
using namespace std;
int main()
{
int k, h[1001], ans[1001];
while(cin >> k)
{
for (int i = 0; i < k; i++)cin >> h[i];
ans[0] = 1;
for (int i = 1; i < k; i++)
{
ans[i] = 1;
for (int j = 0; j < i; j++)
if (h[j] < h[i] && ans[i] < ans[j] + 1)ans[i] = ans[j] + 1;
}
int m = 0;
for (int i = 0; i < k; i++)if (m < ans[i])m = ans[i];
cout << m << endl;
}
return 0;
}