zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    日期和时间模块
    批处理bat文件dos命令实现文件的解压缩
    批处理bat文件dos命令复制文件
    dos命令临时和永久设置环境变量方法
    [转]NHibernate之旅(13):初探立即加载机制
    [转]NHibernate之旅(12):初探延迟加载机制
    [转]NHibernate之旅(11):探索多对多关系及其关联查询
    [转]NHibernate之旅(10):探索父子(一对多)关联查询
    [转]NHibernate之旅(9):探索父子关系(一对多关系)
    [转]NHibernate之旅(8):巧用组件之依赖对象
  • 原文地址:https://www.cnblogs.com/EDGsheryl/p/9153687.html
Copyright © 2011-2022 走看看