您的位置:首页 > 其它

hdu 4212 吉哥系列故事——完美队形I

2015-11-09 22:08 239 查看
将数组反转,求最长上升公共子串

#include<iostream>
#include<cstring>
#define maxn 210
using namespace std;
int a[maxn],b[maxn],n;
void input()
{
cin>>n;
for(int i=1,j=n;i<=n;i++,j--)
{
cin>>a[i];
b[j]=a[i];
}
}
int solve()
{
int dp[maxn];
memset(dp,0,sizeof(dp));
int re=0;
for(int i=1;i<=n;i++)
{
int k=0,j=1;
for(j=1;j<=n-i+1;j++)
{
if(a[i]==b[j])
{
if(j!=n-i+1) dp[j]=max(dp[j],dp[k]+2);
else dp[j]=max(dp[j],dp[k]+1);
}
else if(a[i]>b[j]&&dp[k]<dp[j]) k=j;
}
re=max(dp[j],re);
}
return re;
}
int main()
{
int t;
cin>>t;
while(t--)
{
input();
cout<<solve()<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: