NYOJ 17:長男シーケンスの単調インクリメント【2点】
最長男シーケンスを単調にインクリメント
時間制限:3000 ms | メモリ制限:65535 KB
難易度:
4
説明
文字列の最大増分のサブシーケンスの長さを求めます.
例えば、dabdbfの一番長いインクリメントサブシーケンスはabdfで、長さは4です.
入力
最初の行の整数0その後のn行には、各行に1つの文字列があります.この文字列の長さは10000を超えません.
出力
出力文字列の最大値は、サブシーケンスの長さを増加させます.
サンプル入力
時間制限:3000 ms | メモリ制限:65535 KB
難易度:
4
説明
文字列の最大増分のサブシーケンスの長さを求めます.
例えば、dabdbfの一番長いインクリメントサブシーケンスはabdfで、長さは4です.
入力
最初の行の整数0
出力
出力文字列の最大値は、サブシーケンスの長さを増加させます.
サンプル入力
3
aaa
ababc
abklmncdefg
サンプル出力1
3
7
AC-code:
#include<cstdio>
#include<cstring>
char str[10005],dp[10005];
int main()
{
int n,i,len,l,r,mid;
scanf("%d",&n);
while(n--)
{
int k=1;
scanf("%s",str);
len=strlen(str);
dp[0]=str[0];
for(i=1;i<len;i++)
{
if(str[i]<dp[0])
dp[0]=str[i];
if(dp[k-1]<str[i])
dp[k++]=str[i];
else
{
l=0,r=k-1;
while(l<=r)
{
mid=(l+r)/2;
if(str[i]<=dp[mid])
r=mid-1;
else
l=mid+1;
}
dp[l]=str[i];
}
}
printf("%d
",k);
}
return 0;
}