解题思路:动态规划

  1. 遍历点i,如果从前一个点i-1走到这个点i不需要伞,则疲劳值不变dp[i] = dp[i-1]。
  2. 如果前一个点i-1走到这一个点i需要伞,则从前面找一把伞。
  3. 即遍历前面的每个点j,如果点j处有伞,dp[i] = min(dp[i], dp[j]+(i-j)*fig[j])。fig[j]意为第j个点出伞所需要的疲劳值。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll; bool seg[2010]; //seg[i]=true表示从i-1走到i需要伞
int umb[2010]; //umb[i]如果不为INT_MAX表示第i个位置有伞,且umb[i]是这个点所有伞疲劳值的最小值
int dp[2010]; //dp[i]表示走到第i个点最少需要的疲劳值 int main(){
ios::sync_with_stdio(false);
int a,n,m;
cin >> a >> n >> m;
int k1,k2;
//将seg[k1+1,k2]填充为true,边界考虑清楚,注意seg后面的注释
for(int i = 1;i <= n; ++i) cin >> k1 >> k2, fill(seg+k1+1,seg+k2+1,true);
//umb表示伞
fill(umb, umb+2010, INT_MAX);
for(int i = 1;i <= m; ++i) cin >> k1 >> k2, umb[k1] = min(umb[k1],k2);
fill(dp+1, dp+2010, INT_MAX/2);
for(int i = 1;i <= a; ++i){
//如果从i-1走到i需要伞,则从前面找一把伞
if(seg[i]){
for(int j = i-1;j >= 0; --j)
if(umb[j] != INT_MAX)
dp[i] = min(dp[i], dp[j]+(i-j)*umb[j]);
}else //不需要伞,疲劳值不变
dp[i] = dp[i-1];
}
if(dp[a] == INT_MAX/2) dp[a] = -1;
cout << dp[a] << endl;
return 0;
}

Codeforces 988F. Rain and Umbrellas的更多相关文章

  1. Codeforces 988F Rain and Umbrellas(DP)

    题目链接:http://codeforces.com/contest/988/problem/F 题目大意: 有三个整数a,n,m,a是终点坐标,给出n个范围(l,r)表示这块区域下雨,m把伞(p,w ...

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

    Codeforces Round #486 (Div. 3) F. Rain and Umbrellas 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...

  3. CodeForces 988 F Rain and Umbrellas

    Rain and Umbrellas 题意:某同学从x=0的点走到x=a的点,路上有几段路程是下雨的, 如果他需要经过这几段下雨的路程, 需要手上有伞, 每一把伞有一个重量, 求走到重点重量×路程的最 ...

  4. Codeforces Round #486-F.Rain and Umbrellas题解

    一.题目链接:http://codeforces.com/contest/988/problem/F 二.题面 三.思路 很明显而且比较能想到的$dp$. 四.代码实现 #include<bit ...

  5. Rain and Umbrellas(dp)

    题目链接 http://codeforces.com/problemset/problem/988/F 令dp[i][j]为走到目标为i处,手里拿着第j把伞,同时注意,在某处可能存在不止一把伞 #in ...

  6. CodeForces 1419F Rain of Fire

    题意 不想写. 题解 场上想了 1h+ 无果,一到场外就口胡出来了,我真是个 sb. 首先注意到如果 \(t\) 满足条件那么 \(t+1\) 也会满足,所以答案具有单调性,可以二分,于是现在只需要考 ...

  7. 【赛时总结】◇赛时·V◇ Codeforces Round #486 Div3

    ◇赛时·V◇ Codeforces Round #486 Div3 又是一场历史悠久的比赛,老师拉着我回来考古了……为了不抢了后面一些同学的排名,我没有做A题 ◆ 题目&解析 [B题]Subs ...

  8. DP 题集 1

    关于 DP 的一些题目 参考资料 [Tutorial] Non-trivial DP Tricks and Techniques DP Rain and Umbrellas Mr. Kitayuta, ...

  9. CodeForces 667A Pouring Rain

    A. Pouring Rain time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

随机推荐

  1. Java 多线程(一)Thread

    线程的六种状态 1.新建状态 new了但是没有启动的线程的状态,如“Thread thread = new Thread()”,thread就是一个处于新建状态的线程. 2.运行状态 new出来的线程 ...

  2. C语言整数类型在X86和X64下的字节大小

    C声明 32位机器(X86) 64位机器(X64) char 1 1 short int 2 2 int 4 4 long int 4 8 long long int 8 8 char * 4 8 f ...

  3. update没带where,寻找问题的思路

    数据库版本:5.6.16 前几天,在测试环境中,不知道为什么突然之间,所有的一个字段值全部变成了12,需要将备份还原后开发重新清理垃圾数据并开始测试. 在开发提供 SQL语句的情况下,能否查到是谁做了 ...

  4. 学Arduino 需要做哪些准备?(引自"知乎用户:郑兴芳,DhP"的回答)

    本人非电子专业,使用Arduino完全出于兴趣,目前主要用于实验过程中的自动化操作. 一.基础准备主要是看一些入门介绍的电子文档,如Arduino_Basic.PDF.ArduinoL2.PDF .& ...

  5. HDU 5289 Assignment [优先队列 贪心]

    HDU 5289 - Assignment http://acm.hdu.edu.cn/showproblem.php?pid=5289 Tom owns a company and he is th ...

  6. pytorch 7 optimizer 优化器 加速训练

    import torch import torch.utils.data as Data import torch.nn.functional as F import matplotlib.pyplo ...

  7. python 添加自定义库

    首先,写一个库文件aaa.py 格式,在python安装目录下面创建一个空的文件夹命名Function 或者其他文件名, 然后将文件保存在python 安装目录下面的一个Function文件夹下面. ...

  8. Django Rest Framework 简介及 初步使用

    使用Django Rest Framework之前我们要先知道,它是什么,能干什么用? Django Rest Framework 是一个强大且灵活的工具包,用以构建Web API 为什么要使用Res ...

  9. Vue基础知识点

    基础知识: vue的生命周期: beforeCreate/created.beforeMount/mounted.beforeUpdate/updated.beforeDestory/destorye ...

  10. WampServer更改或重置数据库密码

    WampServer安装后密码是空的, 修改一般有两种方式: 一是通过phpMyAdmin直接修改: 二是使用WAMP的MySql控制台修改. 第一种: ①在phpMyAdmin界面中点击[用户],将 ...