逃生(地图上的dp)
蒜头君在玩一款逃生的游戏。在一个n×m 的矩形地图上,蒜头位于其中一个点。地图上每个格子有加血的药剂,和掉血的火焰,药剂的药效不同,火焰的大小也不同,每个格子上有一个数字,如果格子上的数字是正数说明是一个药剂代表增加的生命值,如果是负数说明是火焰代表失去的生命值。
蒜头初始化有 v 点血量,他的血量上限是 c,任何时刻他的生命值都不能大于血量上限,如果血量为 0 则会死亡,不能继续游戏。
矩形地图上的四个角(1,1),(1,m),(n,1),(n,m)为游戏的出口。游戏中只要选定了一个出口,就必须朝着这个方向走。例如,选择了左下的出口,就只能往左和下两个方向前进,选择了右上的出口,就只能往右和上两个方向前进,左上和右下方向的出口同理。
如果成功逃生,那么剩余生命值越高,则游戏分数越高。为了能拿到最高分,请你帮忙计算如果成功逃生最多能剩余多少血量,如果不能逃生输出 -1。
输入格式
第一行依次输入整数 n,m,x,y,v,c(1<n,m≤1000,1≤x≤n,1≤y≤m,1≤v≤c≤10000), 其中 n,m 代表地图大小,(x,y) 代表蒜头君的初始位置,v 代表蒜头的初始化血量,c代表蒜头的生命值上限。
接下来 n 行,每行有 m 个数字,代表地图信息。(每个数字的绝对值不大于100,地图中蒜头君的初始位置的值一定为 0)
输出格式
一行输出一个数字,代表成功逃生最多剩余的血量,如果失败输出 -1。
样例输入
- - - - - - - -
样例输出
这里需要分开枚举四个方向。而我们可以通过方向变量来控制方向,这是一个小技巧。可以减少代码量。
另外还需要处理一个问题,中途,当遇到某个dp[i][j]小于等于0的时候,把dp[i][j]赋值为−INF,可以让这个位置就不会转移出后继状态了(就算转移了也没效果)。
当dp[i][j]大于c的时候需要把dp[i][j]赋值为c(题目要求)。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
const int INF=0x3f3f3f3f;
typedef long long LL;
using namespace std; int G[][];
int dp[][];
int TX[]={-,-,,};
int TY[]={-,,-,}; int main()
{
int n,m,sx,sy,v,c;
scanf("%d %d %d %d %d %d",&n,&m,&sx,&sy,&v,&c);
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
scanf("%d",&G[i][j]);
}
for(int k=;k<;k++)//控制方向
{
for(int i=sx;i>&&i<=n;i+=TX[k])
{
for(int j=sy;j>&&j<=m;j+=TY[k])
{
if(i==sx&&j==sy) dp[i][j]=v;
else if(i==sx) dp[i][j]=min(c,dp[i][j-TY[k]]+G[i][j]);
else if(j==sy) dp[i][j]=min(c,dp[i-TX[k]][j]+G[i][j]);
else dp[i][j]=min(c,max(dp[i-TX[k]][j],dp[i][j-TY[k]])+G[i][j]);
if(dp[i][j]<=) dp[i][j]=-INF;
}
}
}
int ans=max(max(dp[][],dp[][m]),max(dp[n][],dp[n][m]));
printf("%d\n",ans<=? -:ans);
return ;
}
-
逃生(地图上的dp)的更多相关文章
- iOS进阶_地图上定位的标志——大头针
一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大 ...
- Angularjs+node+Mysql实现地图上的多点标注
注:本文适合对于node有一定基础的人,如果您是小白,请先用1个小时学习node.node文档https://nodejs.org/en/docs/ 该片博文的源码地址:https://github. ...
- (转载)基于LBS地图的开发,满足地图上有头像的需求
最近做的项目主要是LBS这块 主打成员定位功能 我们的UI设计是这样的 乍一看上去是挺好挺美观的 不同的人会显示不同的头像 可是当人扎堆的时候 问题就来了 当人多的时候(例如上图所示) 地图滑动起来就 ...
- Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示
注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定 ...
- 如何在iOS地图上高效的显示大量数据
2016-01-13 / 23:02:13 刚才在微信上看到这篇由cocoachina翻译小组成员翻译的文章,觉得还是挺值得参考的,因此转载至此,原文请移步:http://robots.thought ...
- GMap.Net开发之在地图上添加多边形
上一篇介绍了在GMap上添加自定义标签(GMapMarker),这篇介绍在GMap上添加多边形(GMapPolyogn),并且介绍如何在地图上画任意的多边形. 如果已经知道了多边形的各个点的位置,就可 ...
- ArcGIS Javascript查询数据库并添加到地图上
将数据存放到数据库中,动态的调取比较灵活,数据变动后不需要改变图层的属性表. 此处采用的方法是通过jquery查询数据库,并将数据库的结果生产json串返回给js,在js中动态解析json串增加点至地 ...
- ArcGIS Javascript地图上添加json数据格式的点
/** * 显示地图点. * json的格式[{"name":"name1","x":"x1","y" ...
- 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离。显示为公里、米
/** * calc_map_distance() , 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离 * @param array $point_1 第1个点的x,y坐标 array( ...
随机推荐
- hadoop ozone入门
简介 众所周知,HDFS是大数据存储系统,并在业界得到了广泛的使用.但是无论大集群还是小集群其扩展性都受NameNode的限制,虽然HDFS可以通过Federation进行扩展,但是依然深受小文件和4 ...
- GAN网络进行图片增强
GAN网络进行图片增强 基于Tensorflow框架 调用ModifyPictureSize.py文件 代码如下: from skimage import io,transform,color imp ...
- pyhton输出表格数据出现省略号?(教你很快解决)
//2019.07.18 pandas是python提供的非常好用的数据分析模块,但是在使用pandas进行数据分析时,有时候需要查看打印的结果,当dataframe行数或者列数比较多的时候,打印结果 ...
- 二、Vue组件(component):组件的相互引用、通过props实现父子组件互传值
一.组件各部分说明及互相引用 1.一个vue组件由三个部分组成 Template 只能存在一个根元素 2.Script 3.Style scoped:样式只在当前组件内生效 1.1 组件的基本引用代码 ...
- 【Leetcode】交替打印FooBar
[问题]我们提供一个类: class FooBar { public void foo() { ; i < n; i++) { print("foo"); } } publi ...
- hibernate保存失败
报错:org.hibernate.jdbc.BdatchedTooManyRowsAffectedException: Batch update returned unexpected row cou ...
- 在 Windows 系统上安装 Jekyll
目录 安装 Ruby 环境 用 Bundler 安装 Jekyll 本文是写给完全未用过 Ruby 乃至命令行工具者的.对于一般的开发者,Jekyll 官方文档的相关内容已然足够. 本文为钱院学辅技术 ...
- (转载)wchar_t类型和char类型变量相互转换
转载连接:https://www.cnblogs.com/zhangdewang/p/11420410.html和https://www.cnblogs.com/lanhaicode/p/105742 ...
- 七、JavaScript之console.log输出和document.write输出
一.代码如下 二.运行效果如下 三.点击之后,效果如下 四.按一下F12,在控制台中可以看到
- 116-PHP调用类成员函数
<?php class ren{ //定义人类 public function walk(){ //定义人类的成员方法 echo '我会走路.'; } } $ren=new ren(); //实 ...