/*写了两个版本,一直找不出第一个程序哪里错了。先放着,回头再来继续改
f[i] = max{f[j]}+1 0<=j<i && str[j]<str[i]
*/
/*
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
#define N 10005
char str[N];
int f[N];
int main()
{
int t,max2;
scanf("%d",&t);
getchar();
while(t--)
{
cin.getline(str,N,'\n');
int n = strlen(str);
f[0] = 1;
max2 = 0;
int i,j;
for(i=1;i<n;i++)
{
f[i] = 1;
for(j=0;j<=i-1;j++)
{
if (str[i]>str[j] && f[j]+1>f[i])
f[i] = f[j]+1;
}
if (f[i]>max2)max2 = f[i];
}
printf("%d\n",max2);
}
return 0;
}
*/
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
#define N 10005
char str[N];
int f[N];
int main()
{
int t,max2;
scanf("%d",&t);
getchar();
while(t--)
{
cin.getline(str,N,'\n');
int n = strlen(str);
f[0] = 1;
max2 = 0;
int i,j;
for(i=0;i<n;i++)f[i] = 1;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if (str[i]<str[j] && f[i]+1>f[j])
f[j] = f[i]+1;
}
if (f[i]>max2)max2 = f[i];
}
printf("%d\n",max2);
}
return 0;
}
NYOJ-17:单调递增最长子序列
最新推荐文章于 2018-06-11 20:58:27 发布