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

nyoj 17 資料結構 最長單調遞增子序列

單調遞增最長子序列

時間限制:3000 ms  |  記憶體限制:65535 KB 難度:4
描述
求一個字串的最長遞增子序列的長度
如:dabdbf最長遞增子序列就是abdf,長度為4
輸入
第一行一個整數0<n<20,表示有n個字串要處理
隨後的n行,每行有一個字串,該字串的長度不會超過10000
輸出
輸出字串的最長遞增子序列的長度
樣例輸入
3
aaa
ababc
abklmncdefg
樣例輸出
1
3
7
分析:

經典的DP,從前向後判斷,找出目前的遞增長度,因為可能後邊的都沒有前邊的大,所以不一定左後就是最大的!

01.#include<stdio.h> 02.
#include<string.h> 03.int main() 04.{ 05.int n; 06.scanf("%d",&n); 07.getchar(); 08.while(n--) 09.{ 10.int dp[10001]; 11.char s[10001]; 12.int max=1,l,i,j; 13.gets(s); 14.l=strlen(s); 15.for(i=0;i<l;i++) 16.dp[i]=1; 17.for(i=1; i<l; i++) 18.for(j=0; j<i; j++) 19.if(s[i]>s[j]&&dp[i]<dp[j]+1)
20.dp[i]=dp[j]+1; 21.max=dp[0]; 22.for(i=0; i<l; i++) 23.if(max<dp[i]) 24.max=dp[i]; 25.printf("\n%d\n",max); 26.} 27.return 0; 28.}