首页 > 其他分享 >Codeforces CF255C Almost Arithmetical Progression

Codeforces CF255C Almost Arithmetical Progression

时间:2023-01-07 01:33:41浏览次数:67  
标签:10 CF255C le Almost Codeforces int mp dp

链接
难度:\(1500\)


有一个序列 \(b_{1\sim n}\)。

你需要从中选出一个长度最长的子序列 \(p_{1\sim k}\),使其满足 \(p_1=p_3=...=p_{\lceil\frac{k}{2}\rceil-1},p_2=p_4=...=p_{\lfloor\frac{k}{2}\rfloor\times2}\)。

数据范围:\(n\le 4000, b_i\le 10^6\)。


令 \(dp_{i,j}\) 为到第 \(i\) 个数结尾为 \(j\) 的不包括 \(i\)的最长长度。

则 \(dp_{i,j}\) 只有可能由前面以 \(b_i\) 结尾的序列推来,所以可得 \(dp_{i,j}=max\{dp_{k,b_i}\}(k<i)\)。

因为维护的是不包括 \(i\),所以最终答案需 \(+1\)。

发现 \(b_i\le 10^6\),\(O(n\max\{b_i\}\) 明显不可过,则进行离散化,时间复杂度 \(O(n^2)\)。


// Problem: C. Almost Arithmetical Progression
// Contest: Codeforces - Codeforces Round #156 (Div. 2)
// URL: https://codeforces.com/problemset/problem/255/C
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

# include <bits/stdc++.h>
using namespace std;
map <int, int> mp;
const int N = 4000;
int a [N + 10], dp [N + 10] [N + 10];
int main () {
	ios :: sync_with_stdio (false);
	cin .tie (0);
	cout .tie (0);
	int n;
	cin >> n;
	int m = 0;
	for (int i = 1; i <= n; ++ i) {
		cin >> a [i];
		if (! mp [a [i]]) {
			mp [a [i]] = ++ m;
		}
		a [i] = mp [a [i]];// 这里要先修改好,不然后面每一次转移都要带一个 log 时间复杂度为 O (n ^ 2 log n) 会被卡 
	}
	int ans = 0;
	for (int i = 1; i <= n; ++ i) {
		for (int j = 1; j < i; ++ j) {
			dp [i] [a [j]] = max (dp [i] [a [j]], dp [j] [a [i]] + 1);
			ans = max (ans, dp [i] [a [j]]);
		}
	}
	cout << ans + 1;
	return 0;
}

标签:10,CF255C,le,Almost,Codeforces,int,mp,dp
From: https://www.cnblogs.com/lhzQAQ/p/17032037.html

相关文章

  • 2023.1.6 (Codeforces Round #842 (Div. 2))
    A.GreatestConvexLinkhttps://codeforces.com/contest/1768/problem/ADescription求出最大的\(x(1\leqx<k)\),使得\(x!+(x-1)!\)是\(k\)的倍数。Soluti......
  • Codeforces Round #842 (Div. 2)
    CodeforcesRound#842(Div.2)https://codeforces.com/contest/1768好困,放完代码就跑路。A.GreatestConvex#include<bits/stdc++.h>usingnamespacestd;void......
  • Codeforces Round #842 (Div. 2)
    Preface唉现在这是是做稍微难点的SB题(指Div2正常场的CD难度)总是要犯病因此Rating上不去不说,比赛的时候连EF题面都没机会看一眼这场先是C交上去忘记本机调试的时候把数组......
  • Codeforces Round 842
    目录写在前面ABCDE写在最后写在前面仁王真好玩大太刀真好玩下辈子我还要玩大太刀[](https://pic.imgdb.cn/item/63b7fdb4be43e0d30ec2dccd.jpg)顺带吐槽一下,这什么排......
  • Codeforces Round #842 (Div. 2)
    题目链接A核心思路:样例模拟出答案。#define_CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstring>#include<algorithm>#include<vector>#include<bits/std......
  • Codeforces Round #842 (Div. 2) A-D
    比赛链接A题意给一个数\(k\)找到最大的\(x\),满足\(1\leqx<k\)且\(x!+(x-1)!\)是\(k\)的倍数。题解知识点:数学。猜测\(x=k-1\),证明\((k-1)!+(k-......
  • Codeforces Round #842 (Div. 2) A-C, 补D
    A.GreatestConvex题意:给定一个k,求一个小于k的数x,使得x!+(x-1)!是k的倍数分析:题目已经给出提示:y!=y⋅(y−1)!,输出n-1cout<<n-1<<endl......
  • Codeforces Round #842 (Div. 2) A-D题解
    比赛链接A、GreatestConvex非常的简单。根据样例直接猜是输出\(n-1\).上一个\(Python\)代码。T=int(input())whileT>0:T-=1n=int(input())......
  • B. Quick Sort【Codeforces Round #842 (Div. 2)】
    B.QuickSortYouaregivenapermutation【排列】†\(p\)oflength\(n\)andapositiveinteger\(k≤n\).Inoneoperation,you:Choose\(k\)distinctelement......
  • Codeforces Contest 1616
    A.IntegerDiversity直接用个map贪心,如果有相同的就反向即可。B.MirrorintheString这道题洛谷的翻译锅了,所以建议去看原题。考虑这样一个字符串baacc,那么答案显......