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 ...
随机推荐
- javac编译错误: 编码UTF8/GBK的不可映射字符
转自:https://blog.csdn.net/leytton/article/details/52740171 Linux下为UTF-8编码,javac编译gbk编码的java文件时,容易出现“错 ...
- python grib气象数据可视化
基于Python的Grib数据可视化 利用Python语言实现Grib数据可视化主要依靠三个库——pygrib.numpy和matplotlib.pygrib是欧洲中期天气预报中心 ...
- .NET Entity Framework基本使用方法
生成模型 EF有两种查询方式,Linq查询 .Lambda表达式 //普通查询 Linq 方式 IQueryable<Book> list = from b in db.Set<Bo ...
- 关于php利用数组中某个字段进行排序
工作中用到了一个相关的问题,搜索了百度有好多种方法,但是不同方法对应的函数不同,试了几个发现还是下面这个比较好用: array_multisort($sortarray,SortRank,$sortl ...
- 用python优雅打开文件及上下文管理协议
有次面试被问到如何优雅地打开一个文件? 那就是用with语句,调用过后可以自动关闭. 但是为什么使用with语句就可以自动关闭呢,原因就是上下文管理协议. 上下文管理协议:包含方法 __e ...
- jquery之find,filter,has对比
find()方法找的是符合条件的后代,返回的是子元素. $('div').find('.intro').css('color','red'); //寻找div后代类为intro的元素 filter() ...
- Django中的class Meta
元数据 class Meta做为嵌套类,主要目的是给上级类添加一些功能,或者指定一些标准 # 格式化 将返回的结果自定义 def __str__(self) rerurn self.username ...
- CSS定位方法
- chart.js应用中遇到的问题
问题一:chart.js的版本问题:打开官网https://github.com/chartjs/Chart.js/releases/tag/v2.7.3,点击Tags,选择最新版本,我这里选用的是V ...
- vue 根据接口返回的状态码判断用户登录状态并跳转登录页,登录后回到上一个页面(http拦截器)
背景:后台接口返回code==501表示用户是未登录状态,需要登录才可访问: 通过http拦截做路由跳转 第一步:src目录下新建http.js文件,内容如下: import Axios from ' ...