zoj 2136 Longest Ordered Subsequence

来源:互联网 发布:danee的发展前景知乎 编辑:程序博客网 时间:2024/05/01 03:34
/*动态规划问题找出一个数字序列中最长的不下降序列用dp[i]存储序列中以i结尾的最长的不下降序列的长度则对于s[i]以s[i]结尾的最长不下降序列的长度就是MAX{dp[s[j]]}+1  (s[j]<=s[i]&&j==0...i-1)以sublen记录最大的dp[i]即为最长的不下降序列的长度第一道dp题。。。*/#define LOCAL#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<cstdlib>#include<iomanip>#include<string>#include<algorithm>#include<ctime>#include<stack>#include<queue>#include<vector>#define N 1005using namespace std;int main(){#ifdef LOCAL       freopen("input.txt","r",stdin);       freopen("output.txt","w",stdout);#endifint ncase,slen,sublen,first=1,i,j,dp[N*10],s[N],found;cin>>ncase;while(ncase--){cin.get();cin>>slen;for(i=0;i<slen;i++)cin>>s[i];memset(dp,0,sizeof(dp));dp[s[0]]=1;sublen=1;for(i=1;i<slen;i++){found=0;for(j=0;j<i;j++){if(s[j]<s[i]&&dp[s[j]]+1>dp[s[i]]){dp[s[i]]=dp[s[j]]+1;if(dp[s[i]]>sublen) sublen=dp[s[i]];found=1;}}if(!found){dp[s[i]]=1;}}if(first){first=0;}else{cout<<endl;}cout<<sublen<<endl;}    return 0;}

原创粉丝点击