Codeforces Round #486 (Div. 3) F. Rain and Umbrellas
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的更多相关文章
- Codeforces Round #485 (Div. 2) F. AND Graph
Codeforces Round #485 (Div. 2) F. AND Graph 题目连接: http://codeforces.com/contest/987/problem/F Descri ...
- Codeforces Round #486 (Div. 3) E. Divisibility by 25
Codeforces Round #486 (Div. 3) E. Divisibility by 25 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...
- 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 ...
- Codeforces Round #486 (Div. 3) A. Diverse Team
Codeforces Round #486 (Div. 3) A. Diverse Team 题目连接: http://codeforces.com/contest/988/problem/A Des ...
- Codeforces Round #501 (Div. 3) F. Bracket Substring
题目链接 Codeforces Round #501 (Div. 3) F. Bracket Substring 题解 官方题解 http://codeforces.com/blog/entry/60 ...
- Codeforces Round #499 (Div. 1) F. Tree
Codeforces Round #499 (Div. 1) F. Tree 题目链接 \(\rm CodeForces\):https://codeforces.com/contest/1010/p ...
- Codeforces Round #376 (Div. 2)F. Video Cards(前缀和)
题目链接:http://codeforces.com/contest/731/problem/F 题意:有n个数,从里面选出来一个作为第一个,然后剩下的数要满足是这个数的倍数,如果不是,只能减小为他的 ...
- Codeforces Round #271 (Div. 2) F. Ant colony (RMQ or 线段树)
题目链接:http://codeforces.com/contest/474/problem/F 题意简而言之就是问你区间l到r之间有多少个数能整除区间内除了这个数的其他的数,然后区间长度减去数的个数 ...
- 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 ...
随机推荐
- 八(第一篇)、主体结构元素——article元素、section元素
article元素 article元素代表文档.页面或应用程序中独立的.完整的.可以独自被外部引用的内容. 他可以是一篇博客或者报刊中的文章,一篇轮胎帖子.一段用户评论或独立的插件,或其他任何独立的插 ...
- SpringMVC - 运行流程图及原理分析
流程示意图: 代码分析图:
- [java,2017-05-15] 内存回收 (流程、时间、对象、相关算法)
内存回收的流程 java的垃圾回收分为三个区域新生代.老年代. 永久代 一个对象实例化时 先去看伊甸园有没有足够的空间:如果有 不进行垃圾回收 ,对象直接在伊甸园存储:如果伊甸园内存已满,会进行一次m ...
- sql server driver ODBC驱动超时
- 代码: !AJAX
http://www.cnblogs.com/cwp-bg/p/7668840.html ajax和jsonp使用总结 2017-10-17 var requestUrl="http://l ...
- Java Day26进程01天
Java开启多个线程有两种方法,一种继承Thread类,一种实现Runnable接口.具体示例如下: 01继承Thread类 02实现Runnable接口
- shell脚本运行java程序jar
在UBuntu上部署项目的时候,我们往往通过一段shell来启动程序,甚至是通过crontab定时任务来定时的调用java程序,但是很奇怪的一个问题就是,比如我写了一个如下的shell脚本: #!/b ...
- ABAP-加密解密
report zco_test. data:o_encryptor type ref to cl_hard_wired_encryptor, o_cx_encrypt_error type ref t ...
- Unity与安卓IOS交互
记录下 安卓与Unity交互中 跳坑 找到的资料. <1>建立交互 http://blog.csdn.net/lizhengwei1989/article/details/54631 ...
- IDEA 工具从Json自动生成JavaBean
1.先安装GsonFormat插件:File-->Setting-->Plugins-->GsonFormat-->OK 2.new 一个新的Class空文件,然后 Alt+I ...