Codeforces 559E - Gerald and Path(dp)
真·难度 *3000 的 D1E hb 跟我们说“做不出来不太应该”。
首先我们将所有线段按 \(a_i\) 从小到大排序,一个很显然的想法是 \(dp_{i,j,d}\) 表示我们已经钦定了前 \(i\) 个线段的方向,其中右端点最靠右的线段为 \(j\),它的方向为 \(d\) 所覆盖的最大长度是多少。
接下来考虑转移,考虑从 \(i\) 转移到 \(i+1\),那么线段 \(i+1\) 覆盖 \(j\) 与 \(i+1\) 中间的部分的长度就是 \(\min(\text{线段}\ i+1\ \text{的右端点}-\text{线段}\ j\ \text{的右端点},\text{线段}\ i+1\ \text{的长度})\)。
但是我们这样计算线段 \(i+1\) 的贡献是错误的,因为可能会出现以下的情况:
这种情况下贡献是无法直接计算的。不过我们注意到在这种情况下线段 \(j\) 被完全包含在线段 \(i\) 中,也就是说线段 \(j\) 的贡献为 \(0\)。于是我们考虑另一种转移方式:枚举下一个被计入贡献的线段 \(k\),直接忽略线段 \([i+1,k-1]\) 的贡献。然后按照上面的方式计算即可——虽然我们知道可能 \([i+1,k-1]\) 中的线段也会产生贡献,也就是说我们算出来的贡献不一定是真正的贡献。但是我们清楚,我们忽略了这些贡献,所得到的答案一定没有标准来得更优,并且最优方案一定会被我们考虑到,所以我们这样计算贡献也是正确的。
回到本题来,我们这样计算其实还会忽略一种贡献,那就是在 \([i+1,k-1]\) 中右端点最靠右的线段 \(j\) 的右端点超过了 \(k\) 的右端点,那这样还会产生 \(\text{线段}\ j\ \text{的右端点}-\text{线段}\ k\ \text{的右端点}\) 的贡献,如下图所示:
也就是说,对于 \([i+1,k-1]\) 的线段,我们贪心地钦定每个线段都朝右(我们假设这些线段朝左都没有贡献了),然后看是否存在某条线段右端点超过 \(k\)。
具体来说,我们枚举 \(k\in [i+1,n]\),以及 \(k\) 的方向 \(d_k\),然后在枚举的过程中,记录下右端点最大的线段编号 \(r\),方向 \(d_r\)。然后 \(\mathcal O(1)\) 从 \(dp_{i,j,d}\) 转移到 \(dp_{k,r,d_r}\),那么它产生的贡献就是 \(\text{线段}\ r\ \text{的右端点}-\text{线段}\ k\ \text{的右端点}+\min(\text{线段}\ k\ \text{的右端点}-\text{线段}\ j\ \text{的右端点},\text{线段}\ k\ \text{的长度})\)。
时间复杂度 \(\mathcal O(n^3)\)
Codeforces 559E - Gerald and Path(dp)的更多相关文章
- codeforces 762 D. Maximum path(dp)
题目链接:http://codeforces.com/problemset/problem/762/D 题意:给出一个3*n的矩阵然后问从左上角到右下角最大权值是多少,而且每一个点可以走上下左右,但是 ...
- CodeForces - 710E Generate a String (dp)
题意:构造一个由a组成的串,如果插入或删除一个a,花费时间x,如果使当前串长度加倍,花费时间y,问要构造一个长度为n的串,最少花费多长时间. 分析:dp[i]---构造长度为i的串需要花费的最短时间. ...
- Educational Codeforces Round 51 D. Bicolorings(dp)
https://codeforces.com/contest/1051/problem/D 题意 一个2*n的矩阵,你可以用黑白格子去填充他,求联通块数目等于k的方案数,答案%998244353. 思 ...
- Codeforces 536D - Tavas in Kansas(dp)
Codeforces 题目传送门 & 洛谷题目传送门 其实这题本该 2019 年 12 月就 AC 的(详情请见 ycx 发此题题解的时间),然鹅鸽到了现在-- 首先以 \(s,t\) 分别为 ...
- Codeforces 295D - Greg and Caves(dp)
题意: 给出一个 \(n \times m\) 的矩阵,需对其进行黑白染色,使得以下条件成立: 存在区间 \([l,r]\)(\(1\leq l\leq r\leq n\)),使得第 \(l,l+1, ...
- Codeforces 467C George and Job(DP)
题目 Source http://codeforces.com/contest/467/problem/C Description The new ITone 6 has been released ...
- Codeforces A ACM (ACronym Maker) (dp)
http://codeforces.com/gym/100650 概要:给出一个缩写,和一些单词,从单词中按顺序选一些字母作为缩写,问方案数. 限制:某些单词要忽略,每个单词至少要选一个字母. dp[ ...
- codeforces 813 D. Two Melodies(dp)
题目链接:http://codeforces.com/contest/813/problem/D 题意:求两个不相交的子集长度之和最大是多少,能放入同一子集的条件是首先顺序不能变,然后每一个相邻的要么 ...
- CodeForces - 446A DZY Loves Sequences(dp)
题意:给定一个序列a,求最长的连续子序列b的长度,在至多修改b内一个数字(可修改为任何数字)的条件下,使得b严格递增. 分析: 1.因为至多修改一个数字,假设修改a[i], 2.若能使a[i] < ...
随机推荐
- 【二食堂】Alpha - Scrum Meeting 1
Scrum Meeting 1 例会时间:4.10 8:00 - 8:30 进度情况 组员 上周进度 明日任务 李健 1. 在Anaconda3中搭建了python和django的环境issue1. ...
- GitHub README文件生成目录导航
效果 环境说明 [root@C61 ~]# cat /etc/redhat-release CentOS release 6.10 (Final) [root@C61 ~]# uname -a Lin ...
- Noip模拟79 2021.10.17(题目名字一样)
T1 F 缩点缩成个$DAG$,然后根据每个点的度数计算期望值 1 #include<cstdio> 2 #include<cstring> 3 #include<vec ...
- 热身训练2 Another Meaning
题目来源 简要题意: 众所周知,在许多情况下,一个词语有两种意思.比如"hehe",不仅意味着"hehe",还意味着"excuse me". ...
- OpenWrt编译问题记录
错误一.config.status: error: cannot find input file: `xmetadataretriever/Makefile.in' configure: creati ...
- ASP的调试技术解答
一. 调试 ASP.NET 应用程序时出现"未将项目配置为进行调试"的错误信息 症状 当您在 Visual Studio .NET 中调试 ASP.NET 应用程序时,可能会出现下 ...
- (转载)linux chmod命令用法
chmod----改变一个或多个文件的存取模式(mode) chmod [options] mode files 只能文件属主或特权用户才能使用该功能来改变文件存取模式.mode可以是数字形式(八 ...
- DeWeb - 物资流转管理系统 - 开发1
近期一个朋友提到要做一个安卓手机上物资流转管理系统 准备采用deweb练练手! 大致的计划是先做成手机版网页,然后加壳做成APP 一. 登录 界面基本设计如下 用户表设计如下: 待续
- oracle 修改表空间名
1.登录使用sys用户登录 sqlplus sys/ as sysdba 2.修改表空间名字 SQL> alter tablespace 旧表空间名 rename to 新表空间名; 表空间已更 ...
- 禁用root直接远程登录,使用普通账号登录后再切换root
1.创建一个普通用户 #useradd test 2.给test设置密码 #passwd test 3.禁用root远程登录 #vim /etc/ssh/sshd_config #PermitRoot ...