思路:

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+前缀最大值优化)的更多相关文章

  1. 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的数组, ...

  2. Codeforces Beta Round #27 (Codeforces format, Div. 2)

    Codeforces Beta Round #27 (Codeforces format, Div. 2) http://codeforces.com/contest/27 A #include< ...

  3. 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 ...

  4. Codeforces Round #438 (Div.1+Div.2) 总结

    本来兴致勃勃的想乘着这一次上紫,于是很早很早的到了机房 但是好像并没有什么用,反而rating-=47 Codeforces Round #438(Div.1+Div.2) 今天就这样匆匆的总结一下, ...

  5. [Educational Codeforces Round 81 (Rated for Div. 2)]E. Permutation Separation(线段树,思维,前缀和)

    [Educational Codeforces Round 81 (Rated for Div. 2)]E. Permutation Separation(线段树,思维,前缀和) E. Permuta ...

  6. 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 题解 思路 ...

  7. Codeforces Round #792 (Div. 1 + Div. 2) // C ~ E

    比赛链接:Dashboard - Codeforces Round #792 (Div. 1 + Div. 2) - Codeforces C. Column Swapping 题意: 给定一个n*m ...

  8. Nebius Welcome Round (Div. 1 + Div. 2) 题解 A - D

    Nebius Welcome Round (Div. 1 + Div. 2) 题解 A - D,这四题的整体难度不大,都是过题人数上千的题. 很久没打Codeforces了,在此记录一篇题解,开学了也 ...

  9. 【codeforces】【比赛题解】#868 CF Round #438 (Div.1+Div.2)

    这次是Div.1+Div.2,所以有7题. 因为时间较早,而且正好赶上训练,所以机房开黑做. 然而我们都只做了3题.:(. 链接. [A]声控解锁 题意: Arkady的宠物狗Mu-mu有一只手机.它 ...

  10. Codeforces Round #857 Div.1/Div.2 CF1801/1802 2A~2F 题解

    点我看题(Div2) Div 2A. Likes 如果要赞最多,肯定是先放所有的点赞,再放所有移除的操作.如果要最少,那就先把赞分成两种:最后被移除的和没被移除的:最后先放所有被移除的,放一个移除一个 ...

随机推荐

  1. windows加壳程序WinLicense与Themida

    反调试提示 开了Procmon.exe之后启动游戏会弹出这个框,这个是程序加壳之后的反外挂,反调试提示框. WinLicense A monitor program has been found ru ...

  2. 深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等

    深度学习应用篇-自然语言处理[10]:N-Gram.SimCSE介绍,更多技术:数据增强.智能标注.多分类算法.文本信息抽取.多模态信息抽取.模型压缩算法等 1.N-Gram N-Gram是一种基于统 ...

  3. Hive-mapjoin详解(mapjoin原理)

    笼统的说,Hive中的Join可分为Common Join(Reduce阶段完成join)和Map Join(Map阶段完成join).本文简单介绍一下两种join的原理和机制. 一 .Common ...

  4. Python-集合的基本操作(set)

    1. 前言 python中的集合和数学里的类似也是用于存放不重复的元素,它有可变集合(set)和不可变集合(feozenset)两种,集合的所有元素都放在一对大括号"{}"里(列表 ...

  5. CF1895

    A 题意:你在数轴原点.有一个宝箱在 \(x\),钥匙在 \(y\).每移动一单位,耗费 \(1\) 时间.你可以到了 \(x\) 然后抱着宝箱走,但是抱着宝箱走的总路程不能超过 \(k\) 单位.如 ...

  6. 计网学习笔记九 Routing Fundamentals

    在这一讲开始讲路由器的控制平面.简单介绍了routing,两个最小cost算法. 参考看的文章: VC网络中的路由 VC网络和数据报网络中路由的区别:Differences between Virtu ...

  7. 从零开始手写 mybatis(二)mybatis interceptor 插件机制详解

    前景回顾 第一节 从零开始手写 mybatis(一)MVP 版本 中我们实现了一个最基本的可以运行的 mybatis. 常言道,万事开头难,然后中间难. mybatis 的插件机制是 mybatis ...

  8. Springboot集成Druid连接池并实现数据库密码加密

    Druid介绍 Druid首先是一个数据库连接池.Druid是目前最好的数据库连接池,在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBoss ...

  9. HTML+CSS设计一个朴实无华的登录页

    说明 之前一直偏重于后端技术研究,最近设计网站感觉前端太菜,遂集中看了下CSS的内容.后续我会发表一些前端实战的一些例子,给自己记录的同时希望也能分享给大家. 实现效果 主要知识点 DIV屏幕垂直居中 ...

  10. js数组类型

    js数组类型: 数组检测 1.判断变量是否为数组类型: arr1 instanceof Array Array.isArray(arr1); true 转换方法 toString()方法,以便返回数组 ...