题目描述
Redraiment是个聪明人,总是以奇怪的思考方法思考问题,但不知道为什么,他的解答总是最最巧妙,我们隆重地称他为诡异人! 有一天Jesse不经意中发现,诡异人的走路方法很特别,于是特别关注了他的走路规则。他发现诡异人总是往高处走,但走的步数总是最多,不知道为什么?你能替Jesse研究研究他最多走的步数吗? 发现了你也会是个聪明人!^_^
输入
本题为多样例。 每个样例都以整数n(0 <n≤10000)开始,下面紧跟着n行。每行都有一个整数h(1≤h≤100),表示该地点的高度。
输出
对于每种情况,输出最大步数。
样例输入
<span style="color:#333333">5
1 2 3 4 5
6
2 5 1 5 4 5</span>
样例输出
5
3
思路:
最大上升子序列。
代码:
#include<stdio.h>
#define N 1010
int main()
{
int i,j,k,t,n;
int a[N];
int len[N];
int max;
while(scanf("%d",&n)!=EOF)
{
for(i = 1; i <= n;i ++)
scanf("%d",&a[i]);
len[1] = 1;
for(i = 2;i <= n;i ++)
{
t = 0;
for(k = 1;k < i;k ++)
{
if(a[k] < a[i] && t < len[k])
t = len[k];
}
len[i] = t+1;
}
max = 0;
for(i = 1;i <= n;i ++)
{
if(len[i] > max)
max = len[i];
}
printf("%d\n",max);
}
return 0;
}