题目链接 http://codeforces.com/problemset/problem/988/F

令dp[i][j]为走到目标为i处,手里拿着第j把伞,同时注意,在某处可能存在不止一把伞

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <stack>
#include <cstdlib>
#include <iomanip>
#include <cmath>
#include <cassert>
#include <ctime>
#include <map>
#include <set>
using namespace std;
#pragma comment(linker, "/stck:1024000000,1024000000")
#define lowbit(x) (x&(-x))
#define max(x,y) (x>=y?x:y)
#define min(x,y) (x<=y?x:y)
#define MAX 100000000000000000
#define MOD 1000000007
#define pi acos(-1.0)
#define ei exp(1)
#define PI 3.1415926535897932384626433832
#define ios() ios::sync_with_stdio(true)
#define INF 0x3f3f3f3f
#define mem(a) (memset(a,0,sizeof(a)))
typedef long long ll;
int dp[2006][2006],a,n,m;
int rain[2006],umbre[2006];
int val[2006],pos[2006];
int main()
{scanf("%d%d%d",&a,&n,&m);memset(rain,0,sizeof(rain));memset(umbre,0,sizeof(umbre));a++;for(int i=0,x,y;i<n;i++){scanf("%d%d",&x,&y);for(int j=x+1;j<=y;j++)rain[j]=1;}for(int i=1,x,y;i<=m;i++){scanf("%d%d",&x,&y);x++;pos[i]=x;val[i]=y;if(!umbre[x] || (umbre[x] && y<val[umbre[x]]))umbre[x]=i;}memset(dp,INF,sizeof(dp));dp[0][0]=0;for(int i=0;i<a;i++){for(int j=0;j<=m;j++){if(pos[j]>i) continue;if(j) dp[i+1][j]=min(dp[i+1][j],dp[i][j]+val[j]);if(!rain[i]) dp[i+1][0]=min(dp[i+1][0],dp[i][j]);if(umbre[i]) dp[i+1][umbre[i]]=min(dp[i+1][umbre[i]],dp[i][j]+val[umbre[i]]);//同一个点可能存在多个雨伞
        }}int ans=INF;for(int i=0;i<=m;i++)ans=min(ans,dp[a][i]);printf("%d\n",ans>=INF?-1:ans);return 0;
}

转载于:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/9151923.html

Rain and Umbrellas(dp)相关推荐

  1. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  2. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  3. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  4. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  5. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  6. LeetCode 1223. 掷骰子模拟(DP)

    1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...

  7. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

  8. LeetCode 1139. 最大的以 1 为边界的正方形(DP)

    1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量.如果不存在,则返回 0. 示例 1: 输入:grid ...

  9. 程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

    1. 题目 给定一个方阵,其中每个单元(像素)非黑即白. 设计一个算法,找出 4 条边皆为黑色像素的最大子方阵. 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和 ...

最新文章

  1. Google和Facebook为什么不用Docker?
  2. uva 12100 Printer Queue 优先级队列模拟题 数组模拟队列
  3. ISA Server***检测及配置
  4. layui图片src 指定后没显示_2种方法用python调用cv2模块给图片打马赛克
  5. ELK三件套安装实践之路(1)
  6. 二十四、TextCNN的原理和实现
  7. What's New In C# 6.0
  8. Android 系统(229)---Android与h5交互专题
  9. jssdk 保存文件到手机_手机混用闪存到底是真是假?教你查手机闪存型号
  10. windows端口号速查表
  11. 税收分类编码_四个要点教你如何又快又准选好编码?会计实操干货
  12. 数字电路基础知识(三) 复位设计-异步复位,同步释放
  13. 如何利用网管软件管控网络设备
  14. 机器学习基础-特征工程简析
  15. 基于微信小程序的毕业设计题目(34)PHP小说平台小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
  16. [已解决]消除Flutter Sliver之间存在的间隙
  17. 【iOS逆向与安全】iOS插件开发光速入门
  18. 拉姆表达式 语句组成
  19. 数字IC设计工程师的知识结构(转载学习)
  20. python/sympy计算施密特正交化向量

热门文章

  1. P2572 [SCOI2010]序列操作
  2. C++ smart pointer
  3. 使用StringWriter和StringReader的好处
  4. vxworks 实时操作系统
  5. [_CN] Eclipse精要与高级开发技术 note
  6. jquery div拖动效果示例代码
  7. 求二进制数中1的个数
  8. MongoDB 分布式部署教程
  9. Caffe SSD Ubuntu16 04 训练自己的数据集
  10. jquery通过数值改变球大小