ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Codeforces Round #783 (Div. 2) VP 记录

2022-04-21 11:01:58  阅读:164  来源: 互联网

标签:783 max Codeforces VP Div aligned More 贪心


Codeforces Round #783 (Div. 2) VP 记录

More And More Vegetable……

A. Direction Change

求从 \((1,1)\) 走到 \((n,m)\) 的最小步数。只能上下左右走,不能出界,不能连续两次方向相同。

特判一下所有情况就可以了。

贪心的去走,每走两步横纵距离都减一。处在同一行(列)时就按照 右下右上 循环走就行,根据剩下距离的奇偶性讨论一下。

B. Social Distance

\(a_i\) 大的要尽量和大的挨在一起,因为两个相邻的 \(i,j\) 之间需要的空位数为 \(\max \{ a_i, a_j\}\),这样可以让空位数尽可能小。

直接贪心填就是最优的。

C. Make it Increasing

发现 \(n\) 只有 \(5000\),\(a_i\) 只能在 \(b_i\) 的位置相加减,考虑枚举一下 \(0\) 的位置然后向左向右贪心算一下让其变成递增序列所需要的最小次数即可,最后对答案取一个 \(\min\)。

D. Optimal Partition

一个显然的 DP 是,设 \(f_i\) 表示前 \(i\) 个元素的最大价值,\(s_i = \sum_{j=1}^{i} a_j\)。

那么有转移方程

\[\begin{aligned} f_{i} & = \max \{ f_{j} + (i-j) \} & (s_i - s_j > 0) \\ f_{i} & = \max \{ f_{j} \} & (s_i - s_j = 0) \\ f_{i} & = \max \{ f_{j} + (j-i) \} & (s_i - s_j < 0) \end{aligned} \]

把这个转移方程变一下

\[\begin{aligned} f_{i} & = \max \{ f_{j} - j \} + i & (s_i > s_j) \\ f_{i} & = \max \{ f_{j} \} & (s_i = s_j) \\ f_{i} & = \max \{ f_{j} + j \} - i & (s_i < s_j) \end{aligned} \]

然后发现我们只需要对 \(s_i\) 离散化然后把其当作线段树的下标,然后用两个线段树维护一个 \(\max \{f_j - j\}\) 和 \(\max \{ f_j + j \}\) 就好了,转移的时候直接区间查。

中间那一项因为是单点修改单点查询所以可以只用数组。

总复杂度 \(\mathcal O(n \log n)\)。

标签:783,max,Codeforces,VP,Div,aligned,More,贪心
来源: https://www.cnblogs.com/Silymtics/p/VPCF1668.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有