最长上升子序列
Problem Description
你的任务,就是对于给定的序列,求出最长上升子序列的长度。
Input
Output
Sample Input
7 1 7 3 5 9 4 8
Sample Output
4
#include<stdio.h>
int w[10001] = {0}, a[100001];
int main(void)
{
int i, n, j, m, max = -1;
scanf("%d", &n);
for(i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
}
w[1] = 1;
for(i = 1; i <= n; i++)
{
m = 0; //m用来每次从头开始判断大小的媒介
for(j = 1; j <= i; j++)
{
if(a[i] > a[j])
{
if(m < w[j]) //因为可能有好几个数比它小,所以就要看看那个小数的w[j]大,然后用大的那个加上去
{
m = w[j]; //重要的思想
}
}
}
w[i] = m + 1; //最后加上它本身
}
for(i = 1; i <= n; i++)
{
if(max < w[i])
{
max = w[i]; //因为只是找一个最大值,所以没必要进。行排序,直接用这样的方法来做即可
}
}
printf("%d\n", max);
return 0;
}