Codeforces Round #486 (Div. 3) F. Rain and Umbrellas

题目连接:

http://codeforces.com/group/T0ITBvoeEx/contest/988/problem/E

Description

Polycarp lives on a coordinate line at the point x=0. He goes to his friend that lives at the point x=a. Polycarp can move only from left to right, he can pass one unit of length each second.

Now it's raining, so some segments of his way are in the rain. Formally, it's raining on n non-intersecting segments, the

i-th segment which is in the rain is represented as [li,ri] (0≤li<ri≤a).

There are m umbrellas lying on the line, the i-th umbrella is located at point xi (0≤xi≤a) and has weight pi. When Polycarp begins his journey, he doesn't have any umbrellas.

During his journey from x=0 to x=a Polycarp can pick up and throw away umbrellas. Polycarp picks up and throws down any umbrella instantly. He can carry any number of umbrellas at any moment of time. Because Polycarp doesn't want to get wet, he must carry at least one umbrella while he moves from x to x+1 if a segment [x,

x+1] is in the rain (i.e. if there exists some i such that li≤x and x+1≤ri).

The condition above is the only requirement. For example, it is possible to go without any umbrellas to a point where some rain segment starts, pick up an umbrella at this point and move along with an umbrella. Polycarp can swap umbrellas while he is in the rain.

Each unit of length passed increases Polycarp's fatigue by the sum of the weights of umbrellas he carries while moving.

Can Polycarp make his way from point x=0 to point x=a? If yes, find the minimum total fatigue after reaching x=a, if Polycarp picks up and throws away umbrellas optimally.

Sample Input

10 2 4
3 7
8 10
0 10
3 4
8 1
1 2

Sample Output

14

题意

有几段下雨的地方,有几把雨伞在地上,消耗的值为伞的重量*移动距离,问在不被淋湿的情况下,如何打伞消耗最小

题解:

dp[i]指的是从第i把伞开始打之后的最小消耗,他由dp[j] (j>i)转移而来。

时间复杂度O(m^2)

代码

#include <bits/stdc++.h>

using namespace std;

pair<int, int> r[2010];
pair<int, int> u[2010];
int n, m, a;
int h[2010];
int ans;
const int INF = 0x7fffffff;
int st, fn; int main() {
//freopen("1.txt","r",stdin); cin >> a;
cin >> n >> m;
st = INF;
fn = 0;
for (int i = 0; i < n; i++) {
cin >> r[i].first >> r[i].second;
st = min(st, r[i].first);
fn = max(fn, r[i].second);
}
for (int i = 0; i < m; i++) cin >> u[i].first >> u[i].second;
sort(u, u + m, [](const pair<int, int> &p, const pair<int, int> &q) { return p < q; });
for (int i = 0; i <= m; i++) {
h[i] = INF;
}
sort(r, r + n, [](const pair<int, int> &p, const pair<int, int> &q) { return p < q; });
for (int i = m - 1; i >= 0; i--) {
int index;
for (index = n - 1; index >= 0; index--)
if (r[index].first < u[i].first) break;
int cur = (fn > u[i].first ? fn - u[i].first : 0) * u[i].second;
h[i] = min(h[i], cur); for (int j = 0; j < i; j++) {
int cur;
if (r[index].second > u[j].first) {
cur = (min(r[index].second, u[i].first) - u[j].first) * u[j].second;
} else {
cur = 0;
}
h[j] = min(h[j], h[i] + cur);
}
} ans = INF;
for (int i = 0; i < m; i++) {
if (u[i].first <= st) ans = min(ans, h[i]);
}
if (ans == INF) ans = -1;
cout << ans << endl;
}

Codeforces Round #486 (Div. 3) F. Rain and Umbrellas的更多相关文章

  1. Codeforces Round #485 (Div. 2) F. AND Graph

    Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...

  2. Codeforces Round #486 (Div. 3) E. Divisibility by 25

    Codeforces Round #486 (Div. 3) E. Divisibility by 25 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...

  3. Codeforces Round #486 (Div. 3) D. Points and Powers of Two

    Codeforces Round #486 (Div. 3) D. Points and Powers of Two 题目连接: http://codeforces.com/group/T0ITBvo ...

  4. Codeforces Round #486 (Div. 3) A. Diverse Team

    Codeforces Round #486 (Div. 3) A. Diverse Team 题目连接: http://codeforces.com/contest/988/problem/A Des ...

  5. Codeforces Round #501 (Div. 3) F. Bracket Substring

    题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...

  6. Codeforces Round #499 (Div. 1) F. Tree

    Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...

  7. Codeforces Round #376 (Div. 2)F. Video Cards(前缀和)

    题目链接:http://codeforces.com/contest/731/problem/F 题意:有n个数,从里面选出来一个作为第一个,然后剩下的数要满足是这个数的倍数,如果不是,只能减小为他的 ...

  8. Codeforces Round #271 (Div. 2) F. Ant colony (RMQ or 线段树)

    题目链接:http://codeforces.com/contest/474/problem/F 题意简而言之就是问你区间l到r之间有多少个数能整除区间内除了这个数的其他的数,然后区间长度减去数的个数 ...

  9. Codeforces Round #325 (Div. 2) F. Lizard Era: Beginning meet in the mid

    F. Lizard Era: Beginning Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...

随机推荐

  1. 7-安装Spark

    1.Apache Hadoop2.7中的YARN与JAVA8有冲突,如果想要使用spark on yarn,首先需要在yarn-site.xml中配置如下项: <property> < ...

  2. 关于tp5自动过滤index.php

    在public/.htaccess 中输入这段代码即可实现过滤index.php <IfModule mod_rewrite.c> Options +FollowSymlinks -Mul ...

  3. servlet cdi注入

    @WebServlet("/cdiservlet")//url映射,即@WebServlet告诉容器,如果请求的URL是"/cdiservlet",则由NewS ...

  4. python爬虫之解析库Beautiful Soup

    为何要用Beautiful Soup Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式, 是一个 ...

  5. C++ 下面的AIDL

    转自https://android.googlesource.com/platform/system/tools/aidl/+/brillo-m10-dev/docs/aidl-cpp.md. Bac ...

  6. win10 下安装 neo4j(转)

    1.neo4j介绍 neo4j是基于Java语言编写图形数据库.图是一组节点和连接这些节点的关系.图形数据库也被称为图形数据库管理系统或GDBMS.详细介绍可看Neo4j 教程 2.安装Java jd ...

  7. ssh 报错Host key verification failed 或Ubuntu connect to serve 失败

    ssh 报错Host key verification failed  或Ubuntu connect to serve 失败  通常是因为没有装ssh sudo apt-get install  o ...

  8. OpenStack 安装:keystone服务

    在前面的章节里面,我们配置了基本环境,也安装keystone服务,并且创建了keystone的数据库,在这一篇里面,我们说怎么配置keystone. 首先编辑keystone服务,需要修改如下数据 编 ...

  9. Cocos2dx开发之屏幕适配

    由于各种智能手机的屏幕大小都不一致,会出现同一张图片资源在不同的设备分辨率下显示不一样的问题.为避免这样的情况,需要Cocos引擎能提供多分辨率的支持,也就是说要求实现这样的效果 — 开发者不需要考虑 ...

  10. Apache ab 压力并发测试工具

    当你使用PHP(或其他编程语言)完成一个web程序的开发,并且web程序在Apache服务器上正常运行的时候,你有没有考虑过对你的Apache服务器及部署在其上的web程序进行一些压力测试呢?毕竟,真 ...