NYOJ——17

来源:互联网 发布:linux cp 文件夹 覆盖 编辑:程序博客网 时间:2024/05/02 01:53

题目来源:http://http://acm.nyist.net/JudgeOnline/problem.php?pid=17

单调递增最长子序列


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

题目思想很简单。方法也有很多。这只是其中的一种,比较容易理解罢了

经典的DP问题。时间复杂度是O(n^2)求最长上升子序列的长度。

#include<cstdio>#include<cstring>#include<iostream>using namespace std;#define N 10010int main(){char str[N],a[N];int i,j,len,T,count;scanf("%d",&T);while(T--){scanf("%s",str);count=1;len=strlen(str);a[0]=0;for(i=0;i<len;i++){for(j=count-1;j>=0;j--){if(str[i]>a[j]){a[j+1]=str[i];if(j+1==count)count++;break;}}}printf("%d\n",count-1);}return 0;}



原创粉丝点击