nyoj第79题http://acm.nyist.net/JudgeOnline/problem.php?pid=79
来源
【思路】
换个说法就是,求最长逆序的长度。f[i]是必须以a[i]结尾的最长逆序的长度。
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
int k;
cin>>k;
while(k--){
int i,a[22],f[22],m,max=1;
cin>>m;
// i=sizeof(f); i=88
// memset(f,1,sizeof(f)); //memset对非字符型数组赋初值是不可取的。f[i]=16843009
for(i=1;i<=m;i++)
f[i]=1;
for(i=1;i<=m;i++)
cin>>a[i];
for(i=2;i<=m;i++){
for(int j=1;j<i;j++)
if(a[j]>a[i]&&f[j]>=f[i])
f[i]=1+f[j];
if(max<f[i])
max=f[i];
}
cout<<max<<endl;
}
// system("pause");
return 0;
}
参考:http://blog.csdn.net/sjf0115/article/details/8715437