YCOJ黑熊过河
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黑熊过河的更多相关文章
- YCOJ过河卒C++
过河卒是一道~~较简单 的问题,用递归或者动态规划都可以完成,但今天主要不是递归或者动态规划,而是用深度优先搜索做的.虽然会有两组TLE~~ 深搜是一种向下搜索的算法(如图所示) 它能有效的统计中点到 ...
- [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 ...
- [codevs1105][COJ0183][NOIP2005]过河
[codevs1105][COJ0183][NOIP2005]过河 试题描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青 ...
- A*算法 -- 八数码问题和传教士过河问题的代码实现
前段时间人工智能的课介绍到A*算法,于是便去了解了一下,然后试着用这个算法去解决经典的八数码问题,一开始写用了挺久时间的,后来试着把算法的框架抽离出来,编写成一个通用的算法模板,这样子如果以后需要用到 ...
- 袋鼠过河---DP
题目:一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上都有一个弹簧,袋鼠跳到弹簧上就可以跳的更远,每个弹簧力量不同,用一个数字代表它的力量,如果弹簧力量为5, ...
- NOIP2005过河[DP 状态压缩]
题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...
- ACM 过河问题
过河问题 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的 ...
- NOIP 2005 青蛙过河
做题记录:2016-08-10 21:58:09 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都 ...
- 过河问题nyoj47
时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的.不幸的是 ...
随机推荐
- 通达OA 一些工作流调整后带来的后果及应对措施
近期单位有个工作流须要改动,原因是最早设计时控件的字段设计不规范,控件直接使用了人员的名字来命名了.这不使用手机訪问时就出问题了,名字会直接显示出来,如今就须要进行调整. 调整初步有两个方案: 一是全 ...
- [unity3d]unity平台的预处理
在开发中,特别是unity的跨平台中,我们常常会在各个平台游走,如安卓版,苹果版,PC版.......在此不同的平台上,有可能我们须要做不同的操作.然而我们就能够用unity的自带的平台宏定义方式来做 ...
- App反编译二次打包常见问题处理
1.二次打包时报错:Error retrieving parent for item: No resource found that matches the given name 如: D:\用户文件 ...
- MongoDB与MySQL的插入性能测试【转】
1.1 MongoDB的简单介绍 在当今的数据库市场上,MySQL无疑是占有一席之地的.作为一个开源的关系型数据库,MySQL被大量应用在各大网站后台中,承担着信息存储的重要作用.2009年,甲骨文 ...
- 全国省市区三级联动js
function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,iArray){ this.Items[id] = iArray; ...
- Expression Tree 学习笔记(一)
大家可能都知道Expression Tree是.NET 3.5引入的新增功能.不少朋友们已经听说过这一特性,但还没来得及了解.看看博客园里的老赵等诸多牛人,将Expression Tree玩得眼花缭乱 ...
- appium支持的版本
appium 支持4.2以上的版本 2.3-4.1的版本的支持通过Selendroid实现
- Axure Base 01
名词解释: 线框图:一般就是指产品原型,比如:把线框图尽快画出来和把原型尽快做出来是一个意思. axure元件:也叫axure组件或axure部件,系统自带了一部分最基础常用的,网上也有很多别人做好的 ...
- (深入理解计算机系统) bss段,data段、text段、堆(heap)和栈(stack)
bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域. bss是英文Block Started by Symbol的简称. bss段属于静态内存分配. ...
- HDU 1022 之 Train Problem I
Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...