1. 程式人生 > >nyoj 17 單調遞增最長子序列

nyoj 17 單調遞增最長子序列

單調遞增最長子序列

時間限制:3000 ms  |  記憶體限制:65535 KB

難度:4

輸入

第一行一個整數0<n<20,表示有n個字串要處理
隨後的n行,每行有一個字串,該字串的長度不會超過10000

輸出

輸出字串的最長遞增子序列的長度

樣例輸入

3
aaa
ababc
abklmncdefg

樣例輸出

1
3
7

描述

求一個字串的最長遞增子序列的長度
如:dabdbf最長遞增子序列就是abdf,長度為4

 程式碼如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int n;
char s[10005];
int Max;
int num[10005];
int main()
{
    scanf("%d",&n);
    while (n--)
    {
        Max=0;
        scanf("%s",s);
        //printf("%s\n",s);
        int len=strlen(s);
        for (int i=0;i<len;i++)
            num[i]=1;
        for (int i=0;i<len;i++)
        {
            for (int j=0;j<i;j++)
            {
                if(s[i]>s[j]&&num[i]<num[j]+1)
                {
                    num[i]=num[j]+1;
                }
            }
            Max=max(Max,num[i]);
        }
        printf("%d\n",Max);
    }
    return 0;
}