BZOJ 4884 [Lydsy2017年5月月赛]太空猫(单调DP)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=4884
【题目大意】
太空猫(SpaceCat)是一款画面精致、玩法有趣的休闲游戏,
你需要控制一只坐在迷你飞碟上的猫咪在太空里不断探索,让大家看看你能飞得多远。
游戏地图可以看成一个二维的网格图,上下是两段障碍物。
在游戏的一开始,太空猫位于地图最左边的下边界之上,且重力方向向下。
在每个时刻,你可以用手指点击屏幕,翻转重力的方向,
或者通过遥感控制太空猫往左或往右移动。每次翻转重力方向时,
你需要消耗的能量值等于上下底边之间的高度差。
在左右移动的时候,太空猫可以下降到对应重力方向更低的位置,但不能往上爬。
当然,太空猫也不能穿墙而过。在重力翻转的过程中,
直到碰到地面之前,你都不能操控太空猫左右移动。
太空猫的终点位于地图的最右端的下底边之上,
请计算为了让太空猫到达终点,需要消耗最小能量,如果不能到达请输出-1
【题解】
我们用dp[i][j]表示到第i个位置,重力方向为j时候的最小能量消耗,
对于不可达要在每个位置特殊判断是否存在c[i]<=f[i-1]或者f[i]>=c[i-1]的情况。
【代码】
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
const int N=100010;
int n,c[N],f[N];
LL dp[N][2];
const LL INF=0x3f3f3f3f3f3f3f3f;
int main(){while(~scanf("%d",&n)){for(int i=1;i<=n;i++)scanf("%d",&c[i]);for(int i=1;i<=n;i++)scanf("%d",&f[i]);memset(dp,0x3f,sizeof(dp));dp[1][0]=0; dp[1][1]=c[1]-f[1];for(int i=2;i<=n;i++){if(f[i]<=f[i-1])dp[i][0]=dp[i-1][0];if(c[i]>=c[i-1])dp[i][1]=dp[i-1][1];dp[i][0]=min(dp[i][0],dp[i][1]+c[i]-f[i]);dp[i][1]=min(dp[i][1],dp[i][0]+c[i]-f[i]);if(c[i]<=f[i-1]||f[i]>=c[i-1])dp[i][0]=dp[i][1]=INF;}printf("%lld\n",dp[n][0]==INF?-1:dp[n][0]);}return 0;
}
转载于:https://www.cnblogs.com/forever97/p/bzoj4884.html
BZOJ 4884 [Lydsy2017年5月月赛]太空猫(单调DP)相关推荐
- bzoj 4886: [Lydsy2017年5月月赛]叠塔游戏 并查集
题意 小Q正在玩一个叠塔的游戏,游戏的目标是叠出尽可能高的塔.在游戏中,一共有n张矩形卡片,其中第i张卡片的长度为a_i,宽度为b_i.小Q需要把所有卡片按一定顺序叠成一座塔,要求对于任意一个矩形,它 ...
- BZOJ 4883 [Lydsy2017年5月月赛]棋盘上的守卫(最小生成环套树森林)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4883 [题目大意] 在一个n*m的棋盘上要放置若干个守卫. 对于n行来说,每行必须恰好 ...
- 【BZOJ 4832】 [Lydsy2017年4月月赛] 抵制克苏恩 期望概率dp
打记录的题打多了,忘了用开维记录信息了......我们用f[i][j][l][k]表示已经完成了i次攻击,随从3血剩j个,2血剩l个,1血剩k个,这样我们求出每个状态的概率,从而求出他们对答案的贡献并 ...
- 【bzoj4881】[Lydsy2017年5月月赛]线段游戏 树状数组+STL-set
题目描述 quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成 ...
- Lydsy2017年4月月赛 抵制克苏恩
Description 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平.如果你不玩 炉石传说,不必担心,小Q同学会告诉你所有相关的细节.炉石传说是这样的一个游戏, 每个玩家拥有一个 ...
- [bzoj4881][Lydsy2017年5月月赛]线段游戏
来自FallDream的博客,未经允许,请勿转载,谢谢. quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1, ...
- BZOJ4832: [Lydsy2017年4月月赛]抵制克苏恩
传送门 题目大意: 攻击k次,每次可攻击随从或英雄. 随从数不大于7个,且1滴血的a个,2滴b个,3滴c个. 攻击一次血-1,如果随从没死可以生成3滴血随从一个 题解: 概率/期望dp f[i][j] ...
- BZOJ4883: [Lydsy2017年5月月赛]棋盘上的守卫
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4883 Description 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须 ...
- 【bzoj4883】[Lydsy2017年5月月赛]棋盘上的守卫 最小环套树森林
题目描述 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的,且每个位置最多只能放置一个 ...
最新文章
- [翻译] DTCoreText 从HTML文档中创建富文本
- 过滤器filter的学习
- 翻译JScript中的面向对象系列文章
- 136. 邻值查找【set lower_bound】
- 通过CertEnroll在CA上(1创建证书请求2得到证书3安装证书)
- ubuntu14.04环境下spyder的安装
- P3952 时间复杂度(模拟)
- SVM之交叉验证【转】
- 面向对象2(待补充)
- vue可编辑div_Vue实现MakeDown编辑器
- Debit credit problem
- maven错误相关(整理中)
- android 地图不能拖动,英雄联盟不能拖动小地图的处理方法
- Protus 8.6 及以上如何找到library文件夹
- Win7安装typhon使用心得
- JavaScript实现外溢动态的心
- 程序员外包接单网站记录
- 2020腾讯后台开发暑期实习生面试一面分享(天美工作室群)
- Java中的两种测试方法(JUnit,dbUnit)使用
- (CNVD-2021-17391)|启明星辰-‘‘天清汉马USG防火墙‘‘逻辑漏洞
热门文章
- 主角的创建与选择 Learn Unreal Engine (with C++)
- python爬取酷狗音乐top500_Python爬取酷狗Top500的歌曲!够你吹个小牛皮了吧!
- java圆形进度条_可拖拽圆形进度条组件(支持移动端)
- android menu菜单 实现点击后不消失_教你修改Windows万年不变的黄色文件夹,让文件也不枯燥...
- 深度理解 Virtual DOM
- Java 加密 base64 encode
- Python 第五天
- Android 自定义环形圆形显示统计数据z
- sign check fail: check Sign and Data Fail解决方案
- Ant Design Pro 开发上手