我是靠谱客的博主 真实鲜花,这篇文章主要介绍Codeforces 255C,现在分享给大家,希望可以做个参考。

题意略。

本题考查动态规划,顺便考查一下优化。

这个题目可以归约到最长递增子序列那一类,定义状态:dp[i][j] --- 当前以第i个数结尾,前一个数是第j个数的最长序列。

if(a[i] == a[k]) dp[i][j] = dp[j][k] + 1;

这里不用再去枚举k了,因为从小到大枚举j时可以顺便寻找k。

#include<bits/stdc++.h>
#define maxn 4050
#define maxn2 1000005
using namespace std;
int dp[maxn][maxn],store[maxn];
int maxx[maxn2];
int main(){
int n,ans = 0;
scanf("%d",&n);
for(int i = 1;i <= n;++i){
scanf("%d",&store[i]);
}
dp[0][0] = 1;
for(int i = 1;i <= n;++i){
int k = -1;
for(int j = 0;j < i;++j){
if(k == -1){
if(j > 0) dp[i][j] = 2;
else dp[i][j] = 1;
}
else{
dp[i][j] = max(dp[i][j],dp[j][k] + 1);
}
if(j > 0 && store[i] == store[j]) k = j;
ans = max(ans,dp[i][j]);
}
}
printf("%dn",ans);
return 0;
}
/*
10
1 3 2 4 5 2 6 2 5 6
*/

 

转载于:https://www.cnblogs.com/tiberius/p/8489070.html

最后

以上就是真实鲜花最近收集整理的关于Codeforces 255C的全部内容,更多相关Codeforces内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(130)

评论列表共有 0 条评论

立即
投稿
返回
顶部