Description

有一只黑熊想过河,但河很宽,黑熊不会游泳,只能借助河面上的石墩跳过去,他可以一次跳一墩,也可以一次跳两墩,但是每起跳一次都会耗费一定的能量,黑熊最终可能因能量不够而掉入水中,所幸的事,有些石墩上放了一些食物,这些食物可以给黑熊增加一定的能量,问黑熊能否利用这些石墩安全的抵达对岸,若能,则计算出抵达对岸后剩余能量的最大值是多少?

Input

第一行包含两个整数P(黑熊的初始能量),Q(黑熊每次起跳时耗费的能量),(0≤P,Q≤1000);

第二行只有一个整数N(1≤N≤10^610
6
),即河中石墩的数目;

第三行有N个整数,即每个石墩上食物的能量值ai(0≤ai≤1000)。

Output

输出文件包括一行,若黑熊能抵达对岸,输出抵达对岸后剩余能量的最大值是多少,若不能抵达对岸,则输出“NO”。

Sample Input 1

12 5
5
0 5 2 0 7
Sample Output 1

6

明眼人们一眼就可以看出这道题是一道DP,可如果只能走1步,那么这道题会简单许多,但为了拦住OIer们,他偏偏可以走1步或两步。

算了算了,含着泪也要写这道题。
那现在该怎么办呢?
那我们先来画个图理解一下吧。

这样看起来,这题感觉也不是很难,但要注意的是,中途熊的能量是可能小于0的,所以那是后就要给dp[i][j]赋一个极小值,不然中途又吃活了怎么办?

源代码(附赠注释):

#include <bits/stdc++.h>
using namespace std;
int dp[],a[];
int main(){
int p,q;
cin>>p>>q;
int n;
cin>>n;
for (int i=;i<=n;i++){
cin >>dp[i];
}//输入
dp[]=p;
dp[]+=dp[]-q;
if (dp[]<=){
cout<<"NO";
return ;
}//如果开头都跳不过去,就直接return。
for (int i=;i<=n+;i++){
bool sb=;//一个普通的变量
if(dp[i-]-q>=){
sb=;
}
if(dp[i-]-q>=){
sb=;
}
if (sb){
dp[i]+=max(dp[i-],dp[i-]-q);
if (dp[i]<=){
dp[i]=-1e9;
}//如果它掉到水里去了,就赋一个极小值,不能让他吃诈尸了。
}else{
dp[i]=-1e9;//走一步和走两步都会掉到水里,那就不玩了呗
}
}
dp[n]-=q;
if (dp[n+]<=){
cout<<"No";
}else{
cout<<dp[n];
}//判断一下,可怜的熊是否还活着 return ;
}

标准结局:

YCOJ黑熊过河的更多相关文章

  1. YCOJ过河卒C++

    过河卒是一道~~较简单 的问题,用递归或者动态规划都可以完成,但今天主要不是递归或者动态规划,而是用深度优先搜索做的.虽然会有两组TLE~~ 深搜是一种向下搜索的算法(如图所示) 它能有效的统计中点到 ...

  2. [LeetCode] Frog Jump 青蛙过河

    A frog is crossing a river. The river is divided into x units and at each unit there may or may not ...

  3. [codevs1105][COJ0183][NOIP2005]过河

    [codevs1105][COJ0183][NOIP2005]过河 试题描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青 ...

  4. A*算法 -- 八数码问题和传教士过河问题的代码实现

    前段时间人工智能的课介绍到A*算法,于是便去了解了一下,然后试着用这个算法去解决经典的八数码问题,一开始写用了挺久时间的,后来试着把算法的框架抽离出来,编写成一个通用的算法模板,这样子如果以后需要用到 ...

  5. 袋鼠过河---DP

    题目:一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远,每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5, ...

  6. NOIP2005过河[DP 状态压缩]

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  7. ACM 过河问题

    过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的 ...

  8. NOIP 2005 青蛙过河

    做题记录:2016-08-10 21:58:09 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都 ...

  9. 过河问题nyoj47

    时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是 ...

随机推荐

  1. SQL数据库 更改数据类型

    向表中添加数据 alter table 表名 add 列名 类型 更改表中列的数据类型 alter table 表名 alter column 列名 类型 删除表中的指定列 alter table 表 ...

  2. Comparable 和 Comparator的理解

    对Comparable 的解释 Comparable是一个排序接口 此接口给实现类提供了一个排序的方法,此接口有且只有一个方法 public int compareTo(T o); compareTo ...

  3. OC小实例关于init 方法不小心的错误

    OC小实例关于init 方法不小心的错误  正视遇到的每一个错误 在一个遥控器类操控小车玩具的小实例项目中,我采用组合的方式,将遥控器拥有小汽车对象(has a)关系,而不是继承(is a)关系. 想 ...

  4. mysql语句:SET NAMES UTF8

    一直以来只知道mysql_query("SET NAMES UTF8");是设定数据库编码的,但是一直不清楚“SET NAMES UTF8”是什么. 直到今天才知道 SET NAM ...

  5. VC 无边框对话框的任务栏右键菜单

    MFC ,基于对话框的程序,属性为:Border : none. 程序运行后,在任务栏里面点右键,不会弹出类似下面的菜单: 在对话框的OnInitDialog里面添加如下语句即可: ModifySty ...

  6. Delphi之萝莉调教篇

    本文纯属技术交流.如果各位看官想与小生一起探讨萝莉的问题的话...PM我吧 关于Delphi的萝莉调教技术,很久以前就有大牛做过了...其实技术早掌握了只是觉得太无聊~估计大家也都会于是就没有写~既然 ...

  7. java.lang.IllegalStateException: No instances available for localhost

    在SpringCloud的项目中,我们使用了自动配置的OAuth2RestTemplate,RestTemplate,但是在使用这些restTemplate的时候,url必须是服务的名称,如果要调用真 ...

  8. SD/MMC异同

    该文章转自:http://www.imhan.com/archives/12/ 经常看到SD/MMC这样的写法,在这里稍微总结一下SD卡和MMC卡的异同点吧. 首先,两者在外型的规格上是几乎一致的.而 ...

  9. access函数的使用检查文件的权限【学习笔记】

    #include "apue.h" #include <fcntl.h> int main(int argc,char **argv) { ) err_quit(&qu ...

  10. HDU4763 Theme Section —— KMP next数组

    题目链接:https://vjudge.net/problem/HDU-4763 Theme Section Time Limit: 2000/1000 MS (Java/Others)    Mem ...