http://acm.hdu.edu.cn/showproblem.php?pid=1257
其实就是一个最长上升子序列的求法,只是难得想到而已;
代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <stack>
#include <iostream>
#include <vector>
using namespace std;
int signnum[10000005];
int main()
{
int n,m,a,b,i,j;
int T;
while(cin>>n)
{
vector<int> num;
int sign=0;
for(int i=0;i<n;i++)
{
cin>>a;
num.push_back(a);
}
for(int i=0;i<n;i++)
signnum[i]=1;
for(int i=1;i<n;i++)
{
int max=0;
for(int j=0;j<i;j++)
{
if(num[i]>num[j])
{
if(signnum[j]+1>max)
max=signnum[j]+1;
}
}
if(max!=0)
signnum[i]=max;
}
int max=0;
for(int i=0;i<n;i++)
if(signnum[i]>max)
max=signnum[i];
num.clear();
cout<<max<<endl;
}
}