【题目链接】 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)相关推荐

  1. bzoj 4886: [Lydsy2017年5月月赛]叠塔游戏 并查集

    题意 小Q正在玩一个叠塔的游戏,游戏的目标是叠出尽可能高的塔.在游戏中,一共有n张矩形卡片,其中第i张卡片的长度为a_i,宽度为b_i.小Q需要把所有卡片按一定顺序叠成一座塔,要求对于任意一个矩形,它 ...

  2. BZOJ 4883 [Lydsy2017年5月月赛]棋盘上的守卫(最小生成环套树森林)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4883 [题目大意] 在一个n*m的棋盘上要放置若干个守卫. 对于n行来说,每行必须恰好 ...

  3. 【BZOJ 4832】 [Lydsy2017年4月月赛] 抵制克苏恩 期望概率dp

    打记录的题打多了,忘了用开维记录信息了......我们用f[i][j][l][k]表示已经完成了i次攻击,随从3血剩j个,2血剩l个,1血剩k个,这样我们求出每个状态的概率,从而求出他们对答案的贡献并 ...

  4. 【bzoj4881】[Lydsy2017年5月月赛]线段游戏 树状数组+STL-set

    题目描述 quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1,p_i),其中p_1,p_2,...,p_n构成 ...

  5. Lydsy2017年4月月赛 抵制克苏恩

    Description 小Q同学现在沉迷炉石传说不能自拔.他发现一张名为克苏恩的牌很不公平.如果你不玩 炉石传说,不必担心,小Q同学会告诉你所有相关的细节.炉石传说是这样的一个游戏, 每个玩家拥有一个 ...

  6. [bzoj4881][Lydsy2017年5月月赛]线段游戏

    来自FallDream的博客,未经允许,请勿转载,谢谢. quailty和tangjz正在玩一个关于线段的游戏.在平面上有n条线段,编号依次为1到n.其中第i条线段的两端点坐标分别为(0,i)和(1, ...

  7. BZOJ4832: [Lydsy2017年4月月赛]抵制克苏恩

    传送门 题目大意: 攻击k次,每次可攻击随从或英雄. 随从数不大于7个,且1滴血的a个,2滴b个,3滴c个. 攻击一次血-1,如果随从没死可以生成3滴血随从一个 题解: 概率/期望dp f[i][j] ...

  8. BZOJ4883: [Lydsy2017年5月月赛]棋盘上的守卫

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4883 Description 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须 ...

  9. 【bzoj4883】[Lydsy2017年5月月赛]棋盘上的守卫 最小环套树森林

    题目描述 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的,且每个位置最多只能放置一个 ...

最新文章

  1. [翻译] DTCoreText 从HTML文档中创建富文本
  2. 过滤器filter的学习
  3. 翻译JScript中的面向对象系列文章
  4. 136. 邻值查找【set lower_bound】
  5. 通过CertEnroll在CA上(1创建证书请求2得到证书3安装证书)
  6. ubuntu14.04环境下spyder的安装
  7. P3952 时间复杂度(模拟)
  8. SVM之交叉验证【转】
  9. 面向对象2(待补充)
  10. vue可编辑div_Vue实现MakeDown编辑器
  11. Debit credit problem
  12. maven错误相关(整理中)
  13. android 地图不能拖动,英雄联盟不能拖动小地图的处理方法
  14. Protus 8.6 及以上如何找到library文件夹
  15. Win7安装typhon使用心得
  16. JavaScript实现外溢动态的心
  17. 程序员外包接单网站记录
  18. 2020腾讯后台开发暑期实习生面试一面分享(天美工作室群)
  19. Java中的两种测试方法(JUnit,dbUnit)使用
  20. (CNVD-2021-17391)|启明星辰-‘‘天清汉马USG防火墙‘‘逻辑漏洞

热门文章

  1. 主角的创建与选择 Learn Unreal Engine (with C++)
  2. python爬取酷狗音乐top500_Python爬取酷狗Top500的歌曲!够你吹个小牛皮了吧!
  3. java圆形进度条_可拖拽圆形进度条组件(支持移动端)
  4. android menu菜单 实现点击后不消失_教你修改Windows万年不变的黄色文件夹,让文件也不枯燥...
  5. 深度理解 Virtual DOM
  6. Java 加密 base64 encode
  7. Python 第五天
  8. Android 自定义环形圆形显示统计数据z
  9. sign check fail: check Sign and Data Fail解决方案
  10. Ant Design Pro 开发上手