1127: 最长上升子序列
描述
题目描述:
很普通的动态规划基础题,求一个数字序列的最长上升子序列;
输入:
不确定行,每行表示一个序列;当遇到0时表示程序结束;
输出:
输出最长上升序列的长度(后面的数要比前面的数大);每个测试结果占一行;
样例输入
1 2 3 4 5
8 12 2 7 6 9
0
样例输出
5
3
#include<bits/stdc++.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<cmath>
using namespace std;
int main()
{
while(1)
{
int maxarr[1001];
int maxlen[1001];
int i = 1,n;
while(1 == scanf("%d",&n))
{
maxlen[i] = 1;
maxarr[i] = n;
i++;
if(n==0)
return 0;
if(cin.get() == '\n')
break;
}
for(int j = 2;j <= i-1;j++)
{//每次求第j个数为终点的最长子序列
for(int jj = 1;jj < j;jj++)
{//每次求第一个到j个数为终点的数列
if(maxarr[j] > maxarr[jj])
maxlen[j] = max(maxlen[j],maxlen[jj]+1);
}
}
cout<<maxlen[i-1]<<endl;
}
}