一个数的序列
输入的第一行是序列的长度N (1 <= N <= 1000) 。第二行给出序列中的N个整数,这些整数的取值范围都在0到 10000。
最长上升子序列的长度。
7
1 7 3 5 9 4 8
4
“求以
子问题只和一个变量– 数字的位置相关。因此序列中数的位置k 就是“状态”,而状态 k 对应的“值”,就是以
maxLen (k) 表示以
初始状态: maxLen (1) = 1
maxLen (k) = max { maxLen (i) : 1<=i < k 且 ai < ak且 k≠1 } + 1
若找不到这样的i, 则 maxLen(k) = 1
maxLen(k) 的值,就是在
#include <iostream>
#include <algorithm>
#include "string.h"
#define Max 1001
using namespace std;
int D[Max];
int Maxlen[Max];
int num;
int main(int argc, char const *argv[])
{
int i, j;
int max_len = 0;
cin >> num;
for(i = 1; i <= num; i ++){
cin >> D[i];
Maxlen[i] = 1;
}
for(i = 2; i <= num; i++)
for(j = 1; j < i; j++){
if(D[i] > D[j])
Maxlen[i] = max(Maxlen[i], Maxlen[j]+1);
}
for(i = 1; i <= num; i++)
if(Maxlen[i] > max_len)
max_len = Maxlen[i];
cout << max_len << endl;
return 0;
}
原文地址:http://blog.csdn.net/zwhlxl/article/details/46271053