CF559E Gerald and Path 题解
很困难的 DP 题,状态不是很好想。对于这种线段覆盖类题目,显然先覆盖哪个线段没有影响,我们可以通过按照端点位置升序排序后按照顺序考虑,这样可能会有一些额外性质。
之后,考虑转移时需要什么东西来刻画一个状态的轮廓。显然我们需要知道现在是第几条线段,并且计算贡献需要知道覆盖右端点最远的线段以及其方向。如果这样设计状态,非最远线段的影响就会在加入最远线段时被计算,是正确的。
设状态 \(f_{i,j,k}\) 表示考虑到第 \(i\) 条线段,右端点最远的线段为 \(j\),方向为 \(k\)。考虑刷表,枚举 \(p\) 为考虑到的线段,\(q\) 为其方向。我们可以在从小到大枚举 \(p\) 的时候顺便记录右端点最大的值 \(x\) 与此时的方向 \(y\)。

假设方向全都是向右,我们可以通过上图辅助理解。我们发现,增加的贡献可以分为两段。一段是 \(l+1\sim r\),另一段是 \(r+1\sim mx\)。在此图中,第一段贡献为 \(r-l\),第二段贡献是 \(mx-r\),把这些加到转移时的贡献中。事实上,如果方向不是向右,也是一样的,

假设方向全都是向右,注意到还有这种情况。此时第二段贡献还是 \(mx-r\),但是第一段贡献需要减去 \(l-r\)。注意到这等价于加上 \(r-l\),所以维持原转移不变。

假设方向全都是向右,注意到还有这种情况。第二段贡献不变,但处理第一段时,如果 \(l\) 和 \(r\) 中间有空隙,那么 \(r-l\) 算出来的贡献就过大了,应该只有 \(l[p]\)。此时我们只需要把 \(r-l\) 和 \(l[p]\) 取较小值。
综上所述,状态转移方程为如下。
\]
时间复杂度 \(O(n^3)\)。
#include <bits/stdc++.h>
using namespace std;
struct val
{
long long a,l;
}a[200];
long long n,f[200][200][2],ans=0;
bool cmp(struct val a,struct val b)
{
return a.a<b.a;
}
int main()
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)scanf("%lld%lld",&a[i].a,&a[i].l);
sort(a+1,a+n+1,cmp);
a[0].a=-1e18;
for(int i=0;i<=n;i++)
for(int j=0;j<=i;j++)
for(int k=0;k<2;k++)
{
long long l=a[j].a+k*a[j].l,mx=-1e18,x=0,y=0;
for(int p=i+1;p<=n;p++)
for(int q=0;q<2;q++)
{
long long r=a[p].a+q*a[p].l;
if(r>mx)mx=r,x=p,y=q;
f[p][x][y]=max(f[p][x][y],f[i][j][k]+min(a[p].l,r-l)+mx-r);
}
}
for(int i=0;i<=n;i++)
for(int j=0;j<=i;j++)
for(int k=0;k<2;k++)
ans=max(ans,f[i][j][k]);
printf("%lld\n",ans);
return 0;
}
CF559E Gerald and Path 题解的更多相关文章
- [cf559E]Gerald and Path
将所有线段的端点(即$a_{i}$和$a_{i}\pm l_{i}$)离散,并按照$a_{i}$从小到大排序 定义$f_{i,,j}$表示前$i$条线段在位置$j$之前最多能覆盖的长度(默认覆盖到$j ...
- 「CF559E」 Gerald and Path
「CF559E」 Gerald and Path 为啥我现在做啥题都在想网络流啊 考虑 \(\texttt{DP}\). 容易想到状态应该包含当前枚举了前 \(i\) 条线段,且第 \(i\) 条线段 ...
- 【字典树】【树】【二进制】bzoj1954/POJ3764The xor-longest Path 题解
建立字典树是异或的一种处理方法. Description In an edge-weighted tree, the xor-length of a path p is defined as ...
- 洛谷 UVA12101 Prime Path 题解
一道经典的BFS 用四个for搜索四位就行了,只要能推出怎么只变4位中的一位就很水了 #include<iostream> #include<cstring> #include ...
- CF1327D Infinite Path 题解
原题链接 太坑了我谔谔 简要题意: 求一个排列的多少次幂能达到另一个排列.排列的幂定义见题.(其实不是新定义的,本来就是这么乘的) 很显然,这不像快速幂那样可以结合律. 既然这样,就从图入手. 将 \ ...
- Codeforces 559E - Gerald and Path(dp)
题面传送门 真·难度 *3000 的 D1E hb 跟我们说"做不出来不太应该". 首先我们将所有线段按 \(a_i\) 从小到大排序,一个很显然的想法是 \(dp_{i,j,d} ...
- [USACO15JAN]草鉴定Grass Cownoisseur(分层图+tarjan)
[USACO15JAN]草鉴定Grass Cownoisseur 题目描述 In an effort to better manage the grazing patterns of his cows ...
- 算法与数据结构基础 - 递归(Recursion)
递归基础 递归(Recursion)是常见常用的算法,是DFS.分治法.回溯.二叉树遍历等方法的基础,典型的应用递归的问题有求阶乘.汉诺塔.斐波那契数列等,可视化过程. 应用递归算法一般分三步,一是定 ...
- NOIp2018集训test-9-4
老张让我们2.5h考NOI%你题,喵喵喵? 因为今(我)天(实)的(在)题(太)鬼(弱)畜(了)了,我还只改了t1. Problem A. reorder 考试的时候大家都写了最长不降子序列,然后全员 ...
- [LeetCode 题解]:Path Sum
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Given a bi ...
随机推荐
- 阿里云域名+Github配置Pages
最近用Flutter开发了一个新的应用,准备上架AppStore的时候遇到一个问题,就是通过什么途经能把自己的隐私html和官网html通过链接都显示出来呢? 经过一番的查找和研究后就准备用Githu ...
- 华为od机考2025A卷真题 -补种未成活胡杨
题目描述与示例 题目描述 近些年来,我国防沙治沙取得显著成果.某沙漠新种植N棵胡杨(编号1-N),排成一排. 一个月后,有M棵胡杨未能成活. 现可补种胡杨K棵,请问如何补种(只能补种,不能新种) ,可 ...
- 康谋技术 | 揭秘汽车功能的核心——深度解读ADTF中的过滤器图
在汽车领域,ADTF(Automotive Data and Time-Triggered Framework)是一个强大的工具,用于开发切实可行的汽车功能和复杂的应用程序,实现数据的转换.记录和可视 ...
- pytorch 实战教程之 SPP(SPPNet---Spatial Pyramid Pooling)空间金字塔池化网络代码实现 和 SPPF (Spatial Pyramid Pooling Fast)详解
原文作者:aircraft 原文链接:pytorch 实战教程之 SPP(SPPNet---Spatial Pyramid Pooling)空间金字塔池化网络代码实现 和 SPPF (Spatial ...
- .net core日志NLog的使用
Nlog日志使用 视频:https://www.bilibili.com/video/BV1bv4y1a79X 参照:https://www.cnblogs.com/sheng-jie/p/17169 ...
- python-docx设置标题颜色
from docx import Document from docx.enum.text import WD_PARAGRAPH_ALIGNMENT from docx.shared import ...
- 揭秘 AI 工具的系统提示词「GitHub 热点速览」
这次的五一假期,你打卡了哪些好玩的地方?️ 无论身在何处,都别忘了每周二来咱们的「GitHub 热点速览」打卡!准时为你奉上最新.最热的开源项目! 如果你也曾对 Cursor 这类 AI 编程工具的强 ...
- 经济订货量之"最优经济订货批量和平均存货量和最佳订货次数和订货间隔期和保管费用率"
案例一(最佳订货量) 案例二(最佳订货量+平均存货量) 年需求 = 每周需求*52周 案例三(保管费用率案例和最佳订货量) 保管费用率案例 案例四(最佳订货批量 + 最佳订货次数) 案例五(最佳订货量 ...
- vue3 基础-样式绑定语法
本篇讲 vue 通过数据去进行 dom 样式的绑定操作, 主要分为 字符串, 数组, 对象等方式, 这个非常好理解, 凭着我们朴素的情感就能一步领悟到位的, 就还是演示一段吧. 字符 & 数组 ...
- RPC实战与核心原理之动态代理了
动态代理 回顾 用来解决两个应用之间的通信,而网络则是两台l两台机器之间的"桥梁",只有搭好桥梁才能把请求数据从一端传输到另一端,其中关键就是"可靠的传输" 背 ...