HDU ACM 4512 吉哥系列故事——完美队形I ->LCIS最长公共递增子序列

来源:互联网 发布:意林稿酬和投稿必知 编辑:程序博客网 时间:2024/06/05 11:50

分析:最长公共递增子序列,把数据反向存储一遍,求正反两组数据的LCIS。另外注意边界的条件判断。还有如果取出的新队列有奇数个人或偶数个人要单独判断。

#include<iostream>using namespace std;#define max(a,b) ((a)>(b)?(a):(b))int dp[202];int a[202];int b[202];int LCIS(int n){int i,j,maxlen,ans;memset(dp,0,sizeof(dp));ans=0;for(i=1;i<=n;i++){maxlen=0;for(j=1;j<=n-i+1;j++)    //j<=n-i+1保证中间最多重复一人{if(a[i]>b[j])maxlen=max(maxlen,dp[j]);else if(a[i]==b[j])dp[j]=maxlen+1;if(i<n-j+1)                 //是否重叠ans=max(ans,dp[j]*2);elseans=max(ans,dp[j]*2-1);}}return ans;}int main(){int T,n,i;cin>>T;while(T--){cin>>n;for(i=1;i<=n;i++){cin>>a[i];b[n-i+1]=a[i];      //逆序存储}cout<<LCIS(n)<<endl;}return 0;}


0 0
原创粉丝点击