NYOJ_17_单调递增最长子序列

http://acm.nyist.net/JudgeOnline/problem.php?pid=17

裸的求最长递增子序列。不过要用二分查找+栈优化,不然用二重循环dp会tle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <string.h>

int q(char *input,int begin,int end,char elem)
{
if(begin >= end) return end;
int mid = (begin+end)/2;
if(input[mid] < elem) return q(input,mid+1,end,elem);
else return q(input,begin,mid,elem);
}

int main(int argc, char const *argv[])
{
int t,top,l;
char input[10010],s[10010];
scanf("%d",&t);
while(t--)
{

scanf("%s",input);
top = 1;
s[0]=input[0];

for(int i = 1;i<strlen(input);++i)
{
if(s[top-1] < input[i]){
s[top++] = input[i];
}else{
l=q(s,0,top-1,input[i]);
s[l] = input[i];
}
}

printf("%d\n",top);
}

return 0;
}

NYOJ_17_单调递增最长子序列
http://blog.soul11201.com/2013/06/25/oj-nyoj-17/
作者
soul11201
发布于
2013年6月25日
许可协议