本题难点在正确性证明。

令 \(f_i\) 表示 \([1,i]\) 被全部覆盖的最小花费。答案为 \(f_m\)。

首先发现,添加一个区间 \([0,0]\) 不会影响答案。所以 \(f_i\) 的初值可以设为 \(i\)。(这个很重要,没了就不对了!)

转移,如果 \(i\) 已经被某个初始区间完全覆盖了,那么可以从 \(f_{i-1}\) 转移来。

然后枚举每个区间,如果区间的右端点在 \(i\) 左边,计算把这个区间扩张到能恰好覆盖到 \(i\) 后的左端点。也就是从 \(f_{\max(0,l[j]-(i-r[j]))}+i-r[j]\) 转移来。

记下每个区间被扩张成什么样会炸状态,所以直接从初始的区间开始扩张。

时间复杂度 \(O(nm)\)。

开始证明正确性。

首先证明只用考虑被左边的区间覆盖,不需要考虑右边的。

其实被右边的区间覆盖也被考虑过了,不过转移的时候就直接跳过了这些点(在这个被扩张后的区间中)。所以不用管。

接下来证明直接从初始的区间开始扩张就是最优解。

如果需要在被扩张的区间的基础上继续扩张,说明这次扩张到的点 \(i\) 一定在上次扩张到的点 \(j\) 的右边,扩张到 \(i\) 后的区间的左端点一定跳过了 \(j\)。而我们最后要用到的是 \(i\) 的状态(因为需要继续扩张),所以中间这第一次扩张是没有必要的。

所以这种情况不可能发生。

接下来证明恰好扩张到能覆盖 \(i\) 就是最优解,也就是最优解不需要扩张到覆盖超过 \(i\) 一点点。

如果需要扩张更多,一定是因为可以覆盖左边的更多点,让左边的区间更短(不然覆盖到超过 \(i\) 的位置在 \(f_i\) 是完全没有必要的)。

但是由于添加了区间 \([0,0]\)(没错,它的作用就在这),一定有 \(f_{i+1}\le f_i+1\)(因为覆盖到 \(i\) 的区间可以再扩展一格)。

所以跳过区间后的转移点应该是越右越好。也就是不需要扩展到 \(i\) 右边。

于是这个就是对的了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int maxn=100010;
#define MP make_pair
#define PB push_back
#define lson o<<1,l,mid
#define rson o<<1|1,mid+1,r
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define ROF(i,a,b) for(int i=(a);i>=(b);i--)
#define MEM(x,v) memset(x,v,sizeof(x))
inline ll read(){
char ch=getchar();ll x=0,f=0;
while(ch<'0' || ch>'9') f|=ch=='-',ch=getchar();
while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
return f?-x:x;
}
int n,m,x[maxn],s[maxn],f[maxn];
int main(){
n=read();m=read();
FOR(i,1,n) x[i]=read(),s[i]=read();
f[0]=0;
FOR(i,1,m){
f[i]=i;
bool flag=false;
FOR(j,1,n) if(x[j]+s[j]>=i && x[j]-s[j]<=i) flag=true;
if(flag) f[i]=f[i-1];
FOR(j,1,n) if(x[j]+s[j]<i) f[i]=min(f[i],f[max(0,2*x[j]-i-1)]+i-(x[j]+s[j]));
}
printf("%d\n",f[m]);
}

CF1253E Antenna Coverage(DP)的更多相关文章

  1. E. Antenna Coverage (dp)

    传送门 题意: 在一个一维坐标上,有 n 个东西, 每个东西, 用 xi, si 表示 这个东西在 xi 位置上, 它能覆盖到的区间为 [ xi - si, xi + si ]: 然后, 你可以对任意 ...

  2. LightOJ 1033 Generating Palindromes(dp)

    LightOJ 1033  Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...

  3. lightOJ 1047 Neighbor House (DP)

    lightOJ 1047   Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...

  4. UVA11125 - Arrange Some Marbles(dp)

    UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...

  5. 【POJ 3071】 Football(DP)

    [POJ 3071] Football(DP) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4350   Accepted ...

  6. 初探动态规划(DP)

    学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...

  7. Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)

    原始链接:http://blog.csdn.net/a464057216/article/details/52934077 requirments OS: Ubuntu 14.04+ Gitlab 8 ...

  8. Tour(dp)

    Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...

  9. 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)

    .navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...

随机推荐

  1. HTML入门(html基本文本标签+快捷键讲解以及基本html组成解释)

    id 标签 功能  1  <hr /> 水平分割线  2 <br /> 强制让文本换行  3 <p>段落</p> 段落标签(自带换行效果)  4 < ...

  2. 增加sudo用户访问oracle

    增加zgy用户可以访问数据库[root@DBDATA ~]# useradd zgy--设置密码[root@DBDATA ~]# passwd zgy--设置组[root@DBDATA ~]# use ...

  3. phpMyAdmin开启IP地址登录

    根本没有其他文章说的那么麻烦,又是修改配置文件,又是修改首页文件.在根目录下有个libraries文件夹,进去有个config.default.php文件,修改里面的AllowArbitrarySer ...

  4. dependencyManagement

    maven中的继承是在子类工程中加入父类的groupId,artifactId,version并用parent标签囊括 depenentManagement标签作用: 当父类的pom.xml中没有de ...

  5. Appium(一):java环境、AndroidSDK环境

    1. java环境 java的下载和安装可以看我以前写的Java基础:<java下载和安装>. 2. AndroidSDK环境 2.1 AndroidSDK下载 我们进入:https:// ...

  6. 08. Go 语言包(package)

    Go 语言包(package) Go 语言的源码复用建立在包(package)基础之上.Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同 ...

  7. TopCoder12808 「SRM594Medium」FoxAndGo3 二分图最大独立集

    问题描述 一个 \(N \times N\) 围棋棋盘,任意两个白子不相邻,你要加入若干个黑子并提出白子,最大化空格数目. submit 题解 显然最终棋盘的局面不能够一个白子和它周围的空格都是空的, ...

  8. Ubuntu16.04 GTX750安装CUDA9.0,Pytorch,Anaconda教程

    Ubuntu16 GTX750安装CUDA9.0,Pytorch,Anaconda教程 安装前警告 不要使用Ubuntu18! 不要使用Ubuntu18! 不要使用Ubuntu18! 务必重装成Ubu ...

  9. sshd服务安装-ssh命令使用方法

    SSHD服务概述 介绍:SSH协议:安全外壳协议.为 Secure Shell的缩写.SSH 为建立在应用层和传输层基础上的安全协议. 作用:SSHD服务使用SSH协议可以用来进行远程控制,或在计算机 ...

  10. fjnu2019第二次友谊赛 B题

    ### 题目链接 ### 题目大意: 给你一个 n * m 的地图以及小蛇蛇头的初始位置,告诉你它会往 上.下.左.右 四个方向走.若在走的过程中(包括结束时)会使得小蛇越界,则输出 "Ga ...