nyoj 17 單調遞增最長子序列

  一道經典的最長上升子序列。

用的是二分法   我看大牛們的模板全是在手寫二分。表示對二分的掌控能力還是有些差勁,所以調用了函數。

代碼如下:

 

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int M=10005;
char b[M];
char s[M];
int l;
int lis()
{
    //b[0]=1;
    b[0]=s[0];
    int cur=1;
    for(int i=0; i<l; i++)
    {
        int j=lower_bound(b,b+cur,s[i])-b;
        b[j]=s[i];
        if(j>=cur)
            cur++;
    }
    return cur;
}

int main()
{
    //freopen("in.txt","r",stdin);
    int t;
    scanf("%d",&t);
    getchar();
    while(t--)
    {
        gets(s);
        //puts(s);
        l=strlen(s);
        printf("%d\n",lis());
    }
    return 0;
}
        


發佈了59 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章