您的位置:首页 > 其它

hdu 4512 吉哥系列故事——完美队形I(最长公共上升自序加强版)

2017-04-23 13:13 190 查看
首先要去学习最长公共上升子序列LCIS。然后是对n*n效率的算法进行优化,这里要注意的是能够求出来的序列中间能够有一个最高的。刚開始将输入的数组进行逆置,写下来发现这可能存在问题。

只是详细是什么也没有细致想明确。

#include<bits/stdc++.h>
using namespace std;

int dp[300][300],a[300];

int main()
{
int n,_,i,j,k,ans,mx,t;
scanf("%d",&_);
while(_--)
{
scanf("%d",&n);
for(i=1; i<=n; i++)
{
scanf("%d",&a[i]);
}
memset(dp,0,sizeof(dp));
ans=1;
for(i=1; i<=n; i++)
{
mx=0;
for(j=n; j>i; j--)
{
dp[i][j]=dp[i-1][j];
if(a[i]>a[j]&&mx<dp[i-1][j])
mx=dp[i-1][j];

if(a[i]==a[j]&&dp[i][j]<mx+1)
dp[i][j]=mx+1;

if(2*dp[i][j]>ans)
ans=2*dp[i][j];

for(k=i; k<j; k++)
if(a[k]>a[j])
{
if(2*dp[i][j]+1>ans)
ans=dp[i][j]*2+1;
}
}

}
printf("%d\n",ans);

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐