题目描述:
求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4
输入描述:
第一行一个整数0<20,表示有n个字符串要处理随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出描述:
输出字符串的最长递增子序列的长度
样例输入:
3aaaababcabklmncdefg
样例输出:
137 AC代码:
1 #include2 #include 3 #include 4 using namespace std; 5 char s[10005]; 6 int dp[10005]; 7 int main() 8 { 9 int t;10 scanf("%d",&t);11 while(t--)12 {13 scanf("%s",s);14 int len=strlen(s);15 memset(dp,0,sizeof(dp));16 17 for(int i=0;i s[j]) 23 dp[i]=max(dp[i],dp[j]+1);24 }25 }26 sort(dp,dp+len);27 printf("%d\n",dp[len-1]);28 }29 return 0;30 }
显示答案错误:
#include#include #include using namespace std;char str[10005],a[10005];int dp[10005];int main(){ int n; scanf("%d",&n); while( n-- ){ scanf("%s",a); int len = strlen(a); for( int i = 0; i < len; i++ ) str[i+1] = a[i]; dp[1] = 1; for( int i = 2; i <= len; i++ ){ dp[i] = 0; for( int j = 1; j <= len; j++ ){ if( str[i] > str[j] ) dp[i] = max(dp[i],dp[j]+1); } } int ans = 0; for( int i = 1; i <= len; i++ ) ans = max(ans,dp[i]); printf("%d\n",ans); } return 0;}