14 CodeTON Round 5 (Div. 1 + Div. 2, Rated, Prizes!)C. Tenzing and Balls(dp+前缀最大值优化)
思路:
dp还是挺明显的,思路可以参考最长上升子序列
有点dp的感觉
\(f[i]\)表示考虑前\(i\)个数,的最大值
当前数有两种删或不删
不删:\(f[i]=f[i-1]\);
删:\(f[i]=max{f[j-1]+i-j+1}\)
这个转移是\(O(n^2)\)的显然时间上来不及
考虑优化,第一层循环一定是省不了的
考虑优化掉第二层循环
将j提出了\(f[i]=max{f[j-1]-j}+i+1\),f[j-1]-j是满足所有\(a[i]==a[j]\)中最大的,这个可以维护一下前缀最大值
#include <bits/stdc++.h>
#define int long long
#define rep(i, a, b) for(int i = (a); i <= (b); ++i)
#define fep(i, a, b) for(int i = (a); i >= (b); --i)
#define _for(i, a, b) for(int i=(a); i<(b); ++i)
#define pii pair<int, int>
#define pdd pair<double,double>
#define ll long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
#define vi vector<int>
#define inf -0x3f3f3f3f
/*
* 有点dp的感觉
* f[i]表示考虑前i个数,的最大值
* 当前数有两种删或不删
* 不删:f[i]=f[i-1];
* 删:f[i]=max{f[j-1]+i-j+1}
* 这个转移是$O(n^2)$的显然时间上来不及
* 考虑优化,第一层循环一定是省不了的
* 考虑优化掉第二层循环
* 将j提出了$f[i]=max{f[j-1]-j}+i+1$,f[j-1]-j是满足所有a[i]==a[j]中最大的,这个可以维护一下前缀最大值
*/
using namespace std;
const int maxn = 2e5 + 10;
int f[maxn],a[maxn],sum[maxn];
vi p[maxn];
int n;
void solve() {
cin>>n;
rep(i,1,n){
f[i]=0;
sum[i]=inf;
}
rep(i,1,n){
cin>>a[i];
}
//dp
//初始化0、1都无法去转移初始化为0
f[0]=f[1]=0;
rep(i,1,n){
int x=a[i];
f[i]=f[i-1];
//这样转移会tle需要优化
// rep(j,0,p[x].size()-1){
// if(p[x][j]==i) continue;
// f[i]=max(f[i],f[p[x][j]-1]+i-p[x][j]+1);
// }
f[i]=max(sum[x]+i,f[i]);
sum[x]=max(sum[x],f[i-1]-i+1);
}
cout<<f[n]<<endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
// freopen("C:\\Users\\24283\\CLionProjects\\untitled2\\1.in", "r", stdin);
int _;
cin >> _;
while (_--)
solve();
return 0;
}
14 CodeTON Round 5 (Div. 1 + Div. 2, Rated, Prizes!)C. Tenzing and Balls(dp+前缀最大值优化)的更多相关文章
- CF Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined)
1. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) B. Batch Sort 暴力枚举,水 1.题意:n*m的数组, ...
- Codeforces Beta Round #27 (Codeforces format, Div. 2)
Codeforces Beta Round #27 (Codeforces format, Div. 2) http://codeforces.com/contest/27 A #include< ...
- Codeforces 1023 A.Single Wildcard Pattern Matching-匹配字符 (Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Fi)
Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) A. Single Wildcard Patter ...
- Codeforces Round #438 (Div.1+Div.2) 总结
本来兴致勃勃的想乘着这一次上紫,于是很早很早的到了机房 但是好像并没有什么用,反而rating-=47 Codeforces Round #438(Div.1+Div.2) 今天就这样匆匆的总结一下, ...
- [Educational Codeforces Round 81 (Rated for Div. 2)]E. Permutation Separation(线段树,思维,前缀和)
[Educational Codeforces Round 81 (Rated for Div. 2)]E. Permutation Separation(线段树,思维,前缀和) E. Permuta ...
- Codeforces Round #792 (Div. 1 + Div. 2) A-E
Codeforces Round #792 (Div. 1 + Div. 2) A-E A 题目 https://codeforces.com/contest/1684/problem/A 题解 思路 ...
- Codeforces Round #792 (Div. 1 + Div. 2) // C ~ E
比赛链接:Dashboard - Codeforces Round #792 (Div. 1 + Div. 2) - Codeforces C. Column Swapping 题意: 给定一个n*m ...
- Nebius Welcome Round (Div. 1 + Div. 2) 题解 A - D
Nebius Welcome Round (Div. 1 + Div. 2) 题解 A - D,这四题的整体难度不大,都是过题人数上千的题. 很久没打Codeforces了,在此记录一篇题解,开学了也 ...
- 【codeforces】【比赛题解】#868 CF Round #438 (Div.1+Div.2)
这次是Div.1+Div.2,所以有7题. 因为时间较早,而且正好赶上训练,所以机房开黑做. 然而我们都只做了3题.:(. 链接. [A]声控解锁 题意: Arkady的宠物狗Mu-mu有一只手机.它 ...
- Codeforces Round #857 Div.1/Div.2 CF1801/1802 2A~2F 题解
点我看题(Div2) Div 2A. Likes 如果要赞最多,肯定是先放所有的点赞,再放所有移除的操作.如果要最少,那就先把赞分成两种:最后被移除的和没被移除的:最后先放所有被移除的,放一个移除一个 ...
随机推荐
- (数据科学学习手札76)基于Python的拐点检测——以新冠肺炎疫情数据为例
本文对应代码.数据及文献资料已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes,对代码不感兴趣的朋友可以直接跳至2.2 探 ...
- Gin 框架之Cookie与Session
目录 一.Cookie和Session的由来 二.Cookie简介 1. 什么是Cookie 2. Cookie规范 3. 安全性 4. Cookie 关键配置 三.Session简介 1. 什么是S ...
- c++基础之语句
上一次总结了一下c++中表达式的相关内容,这篇博文主要总结语句的基础内容 简单语句 c++ 中语句主要是以分号作为结束符的,最简单的语句是一个空语句,空语句主要用于,语法上需要某个地方,但是逻辑上不需 ...
- c++基础之表达式
这次接着更新<c++ primer> 这本书的读书笔记,上一篇博文更新到了书中的第三章,本次将记录书中的第四章--表达式 左值与右值 在理解表达式之前需要先理解c++中左值和右值的概念. ...
- 【深度学习项目五】:利用LSTM网络进行情感分析(NLP)
相关文章: [深度学习项目一]全连接神经网络实现mnist数字识别](https://blog.csdn.net/sinat_39620217/article/details/116749255?sp ...
- Flask Paginate实现表格分页
flask_paginate 是 Flask 框架的一个分页扩展,用于处理分页相关的功能.它可以帮助你在 Flask Web 应用程序中实现分页功能,让用户可以浏览大量数据的不同部分.本篇博文重点讲述 ...
- VB6的OfficeMenu控件 - 开源研究系列文章
这次将原来VB6中喜欢和使用到的OfficeMenu的控件做一个使用介绍. 上次介绍了VB6中的控件引擎,但是那个只针对基本的控件,这个OfficeMenu控件在当时是收费的,笔者找度娘好不容易才下载 ...
- Mybatis 源码系列:领略设计模式在 Mybatis 其中的应用
目录 一.Builder模式 二.工厂模式 三.单例模式 四.代理模式 五.组合模式 六.模板方式模式 七.适配器模式 八.装饰器模式 九.迭代器模式 虽然我们都知道有23种设计模式,但是大多停留在概 ...
- 深入浅出 Application Insights--学习笔记
摘要 介绍如何将 Application Insights 用于生产上实践,并透过它发现/诊断问题.同时也会介绍如何将 Application Insighs 与其他体系相集成实现 Devops(与发 ...
- HBase执行stop-hbash.sh关闭命令等待时间过长
问题描述 执行stop-hbase.sh时,等待很长时间都没结束(出来很多"...") 解决办法: hbase-daemons.sh stop masterhbase-daemon ...