传送门

题意: 在一个一维坐标上,有 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)的更多相关文章

  1. CF1253E Antenna Coverage(DP)

    本题难点在正确性证明. 令 \(f_i\) 表示 \([1,i]\) 被全部覆盖的最小花费.答案为 \(f_m\). 首先发现,添加一个区间 \([0,0]\) 不会影响答案.所以 \(f_i\) 的 ...

  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. IEDA 启动main报 stock

    1 . 启动资源管理器关闭java进程,重新启动还是没有解决问题 2.看网上说jdk版本1.8换成1.7 启动成功,已解决,不知道为为什么.

  2. Linux学习笔记之rpm包管理功能全解

    0x00 软件包管理器 所有的软件都是由文件格式的程序代码(即源代码),经过编译成为一个可执行二进制文件:对于一个软件来说,其包含二进制程序.库文件.配置文件以及帮助文件.在应用中,每次要安装程序时通 ...

  3. CDH5.14.4中的Hue集成HBase

    1.进入CDH中的给HBase添加Thrift Server角色实例, 为了方便, 将Thrift Server添加到Hue同一主机 2.HBase Thrift Server中选择主机cm1: 3. ...

  4. VsCode中编写python环境配置

    1. VsCode中编写python环境配置 1.1. 前言 有过开发经验都知道idea一系列的软件虽然功能比较多,但比较容易卡,电脑不好还真容易上火,这里我想要入门python,还是选了款vscod ...

  5. element-ui Upload 上传获取当前选择的视频时长

    <el-upload class="upload-demo" ref="vidos" :action="URL+'/api/post/file' ...

  6. 搭建idea出现无法自动映射Mapper问题

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 如出这种问题,导致的原因是mapp.xm ...

  7. MYSQL入门这一篇就够了

    安装概述 分为5.6与,5.7版本,5.7的安装与5.6略有不同,因为依赖BOOST库,下面给出2个版本的安装脚本,直接运行即可 Mysql 5.6 [root@Tuiliu ~]# cat mysq ...

  8. 微服务spring-cloud 学习第一天

    了解微服务     微服务架构风格是一种将单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常使用HTTP).这些服务围绕业务能力构建并且可通过自动部署 ...

  9. Shell 编程 基础

    本篇主要写一些shell脚本的基础知识,编程规范. 第一个shell脚本 [root@localhost ~]# vim first.sh #!/bin/bash # This is first Sh ...

  10. golang reflect知识集锦

    目录 反射之结构体tag Types vs Kinds reflect.Type vs reflect.Value 2019/4/20 补充 reflect.Value转原始类型 获取类型底层类型 遍 ...