E. Antenna Coverage (dp)
题意: 在一个一维坐标上,有 n 个东西, 每个东西, 用 xi, si 表示 这个东西在 xi 位置上,
它能覆盖到的区间为 [ xi - si, xi + si ];
然后, 你可以对任意的东西, 扩大它的 覆盖区间, 即对 si 加 1; 花费1;
问你 覆盖 [ 1, m ] 的最少花费。
n <= 80, m <= 100000;
解: 显然 DP;
我们用 dp[ i ] 表示 覆盖 i ~ m 的最少花费。
然后我们从 m ~ 1 枚举 x;
若这个x 被某个东西覆盖, 则 dp[ i ] = dp[ i + 1 ];
否则, 枚举 所有的 n 个东西, 判断 那些 xi - si 大于你当前枚举的那个 x 的东西。
那么你设 dis = xi - si - x; 即你到那个东西覆盖的区间的左端点的距离。
然后, 因为它左边扩了 dis, 那么它右边也可以扩 dis;
那么,答案就是 dis + dp[ xi + si + dis];
然后, 最后 dp[ 1 ] 就是答案了。
#include <bits/stdc++.h>
#define LL long long
#define INF 0x3f3f3f3f
using namespace std;
struct note {
int l, r;
}a[];
bool cmp(note a, note b) {
return a.l == b.l ? a.r < b.r : a.l < b.l;
}
const int N = 2e5 + ;
int dp[N];
int main() { int n, m; scanf("%d %d", &n, &m);
for(int i = ; i <= m; i++) dp[i] = INF;
int ma = ;
for(int i = ; i <= n; i++) {
int x, s; scanf("%d %d", &x, &s);
a[i].l = max(x - s, ); a[i].r = min(x + s, m);
ma = max(ma, a[i].r);
for(int j = a[i].l; j <= a[i].r; j++) {
dp[j] = ;
}
}
for(int i = m; i > ma; i--) dp[i] = m - i + ;
// n++; a[n].l = n; a[n].r = n;
sort(a + , a + + n, cmp);
dp[m + ] = ;
for(int i = m; i >= ; i--) {
if(dp[i] == ) dp[i] = dp[i + ];
else {
for(int j = ; j <= n; j++) {
if(a[j].l > i) {
int dis = a[j].l - i;
int R = min(a[j].r + dis, m);
dp[i] = min(dp[i], dis + dp[R + ]);
}
}
}
}
printf("%d\n", dp[]);
}
E. Antenna Coverage (dp)的更多相关文章
- CF1253E Antenna Coverage(DP)
本题难点在正确性证明. 令 \(f_i\) 表示 \([1,i]\) 被全部覆盖的最小花费.答案为 \(f_m\). 首先发现,添加一个区间 \([0,0]\) 不会影响答案.所以 \(f_i\) 的 ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
- 初探动态规划(DP)
学习qzz的命名,来写一篇关于动态规划(dp)的入门博客. 动态规划应该算是一个入门oier的坑,动态规划的抽象即神奇之处,让很多萌新 萌比. 写这篇博客的目标,就是想要用一些容易理解的方式,讲解入门 ...
- Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)
原始链接:http://blog.csdn.net/a464057216/article/details/52934077 requirments OS: Ubuntu 14.04+ Gitlab 8 ...
- Tour(dp)
Tour(dp) 给定平面上n(n<=1000)个点的坐标(按照x递增的顺序),各点x坐标不同,且均为正整数.请设计一条路线,从最左边的点出发,走到最右边的点后再返回,要求除了最左点和最右点之外 ...
- 2017百度之星资格赛 1003:度度熊与邪恶大魔王(DP)
.navbar-nav > li.active > a { background-image: none; background-color: #058; } .navbar-invers ...
随机推荐
- standard_init_linux.go:178: exec user process caused "no such file or directory"
golang docker build 制作完进项后运行报错 出现该问题的原因是编译的环境和运行的环境不同,可能有动态库的依赖 1.默认go使用静态链接,在docker的golang环境中默认是使用动 ...
- HDU校赛 | 2019 Multi-University Training Contest 5
2019 Multi-University Training Contest 5 http://acm.hdu.edu.cn/contests/contest_show.php?cid=852 100 ...
- Java自学-类和对象 类方法
Java的类方法和对象方法 类方法: 又叫做静态方法 对象方法: 又叫实例方法,非静态方法 访问一个对象方法,必须建立在有一个对象的前提的基础上 访问类方法,不需要对象的存在,直接就访问 步骤 1 : ...
- Vue--基础2
目录 Vue--基础2 vue成员获取 分隔符成员 计算属性成员 什么是计算属性 计算属性的用法 注意: 监听属性成员 组件 组件的介绍 组件的优点: 局部组件 全局组件 组件复用的数据隔离 组件之间 ...
- 换个语言学一下 Golang (12)——Web基础
一.web工作方式 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容.在这个看似简单的用户行为背后,到底隐藏了些什么呢?对于普通的上网过程,系统其实是这样做的 ...
- Matlab解释器模式
解释器模式(Interperter),给定一个语言,定义一个语言的文法,并且建立一个解释器来解释该语言中的句子,实际开发中EL表达式或者正则表达式的解释器就是采用这种设计模式.其模式结构如下图.本文使 ...
- Java学习之:Spring的扩展配置
1.在配置文件applicationContext.xml中,引入相关的配置文件方式: 2.使用Jndi数据源的方式改造配置文件applicationContext.xml: 3.注释配置文件appl ...
- Vue 中 $nextTick() 的应用
Vue 在更新 DOM 时是异步执行的. 只要侦听到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据变更.如果同一个 watcher 被多次触发,只会被推入到队列中一次.这种在缓 ...
- Golang: 抓取网页内容
今天写个简单的程序,根据指定的 URL 来抓取相应的网页内容,然后存入本地文件.这个程序会涉及到网络请求和文件操作等知识点,下面是实现代码: // fetch.go package main impo ...
- PHP在无限分类时注意的一些问题(不保证代码完全正确哦)
转自:PHP在无限分类时注意的一些问题(http://lxiaoke.cn) (注意:代码使用的是原生PHP,旨在提供解决思路)1 无限分类的查找(获取所有节点) 代码: /** * 无限分类查询,默 ...