蒜头君在玩一款逃生的游戏。在一个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)的更多相关文章

  1. iOS进阶_地图上定位的标志——大头针

    一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大 ...

  2. Angularjs+node+Mysql实现地图上的多点标注

    注:本文适合对于node有一定基础的人,如果您是小白,请先用1个小时学习node.node文档https://nodejs.org/en/docs/ 该片博文的源码地址:https://github. ...

  3. (转载)基于LBS地图的开发,满足地图上有头像的需求

    最近做的项目主要是LBS这块 主打成员定位功能 我们的UI设计是这样的 乍一看上去是挺好挺美观的 不同的人会显示不同的头像 可是当人扎堆的时候 问题就来了 当人多的时候(例如上图所示) 地图滑动起来就 ...

  4. Angularjs+node+Mysql实现地图上特定点的定位以及附加信息展示

    注:本博文为博主原创,转载请注明出处. 在上一篇博文中主要讲述了如何利用AngularJs+Node+MySql构建项目,并实现地图上的多点标注,今天在这篇文章中,我们将在上一个项目的基础上,实现特定 ...

  5. 如何在iOS地图上高效的显示大量数据

    2016-01-13 / 23:02:13 刚才在微信上看到这篇由cocoachina翻译小组成员翻译的文章,觉得还是挺值得参考的,因此转载至此,原文请移步:http://robots.thought ...

  6. GMap.Net开发之在地图上添加多边形

    上一篇介绍了在GMap上添加自定义标签(GMapMarker),这篇介绍在GMap上添加多边形(GMapPolyogn),并且介绍如何在地图上画任意的多边形. 如果已经知道了多边形的各个点的位置,就可 ...

  7. ArcGIS Javascript查询数据库并添加到地图上

    将数据存放到数据库中,动态的调取比较灵活,数据变动后不需要改变图层的属性表. 此处采用的方法是通过jquery查询数据库,并将数据库的结果生产json串返回给js,在js中动态解析json串增加点至地 ...

  8. ArcGIS Javascript地图上添加json数据格式的点

    /** * 显示地图点. * json的格式[{"name":"name1","x":"x1","y" ...

  9. 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离。显示为公里、米

    /** * calc_map_distance() , 根据地图上的两个点各自的x,y坐标,计算出2点之间的直线距离 * @param array $point_1 第1个点的x,y坐标 array( ...

随机推荐

  1. 编译安装常用包+阿里镜像源-常用资源-系统-下载-科莱软件下载-docker仓库包-安全圈-杏雨梨云-图形界面安装-docker私有双仓库-阿里源报错处理-centos7目录大小

    yum install apr-util apr-util-devel apr apr-devel pcre pcre-devel zlib zlib-devel openssl openssl-de ...

  2. memortstream Base64编码和filestream base64编码不同

    memorystream base64 function BaseImage(fn: string): string; var   m1: TMemoryStream;   m2: TStringSt ...

  3. linux安装postgresql数据库

    本文提供数据库安装脚本,有部分需要优化,就是脚本中的方法执行存在前后依赖,但是代码里面没有对上一个执行结果进行判断,如果提供的路径和安装包没有问题,脚本能够正常执行 #!/bin/bash # ins ...

  4. SPI协议解析

    1. SPI物理层 SPI通讯需要使用4条线:3条总线和1条片选 . SPI遵循主从模式,3条总线分别是SCK.MOSI和MISO,片选线为nSS(低电平有效),SPI协议适用于一主多从的工作场景: ...

  5. H5页面,华为手机打开不加载JS的问题

    今天在做H5页面放在其他手机上面都可以刷出列表,但是就是放在华为手机上面刷不出来,怎么想都想不通,后面主管说华为手机的浏览器是严格遵守H5什么鬼东西的,然后其他浏览器做到比较好的,如果有报错就帮我们解 ...

  6. Mysql 模糊查询 转义字符

    MySQL的转义字符“\” \0   一个ASCII  0  (NUL)字符.    \n    一个新行符.    \t    一个定位符.    \r    一个回车符.    \b    一个退 ...

  7. TS-Lint 安装方法

    1  在 Visual Studio Extensions  里下载 TSLint  2  在项目根目录下放 tslint.json 文件 (里面的规则定死就好 我认为没有特别大的意义)

  8. 12.swoole学习笔记--锁机制

    <?php //创建锁对象 $lock=new swoole_lock(SWOOLE_MUTEX);//互斥锁 echo "创建互斥锁\n"; //开始锁定 主进程 $loc ...

  9. 用 Python监控了另一半的每天都在看的网站,我发现了一个秘密

    ​ 阅读文本大概需要 5 分钟. ! 需求: (1) 获取你对象chrome前一天的浏览记录中的所有网址(url)和访问时间,并存在一个txt文件中 (2)将这个txt文件发送给指定的邮箱地址(你的邮 ...

  10. 040-PHP使用闭包函数来进行父实例的变量自增,正确示例

    <?php // 如何使用闭包函数来进行父实例的变量自增 function demo(){ $num = 1; # 给use的变量加个&符合,就能改变对应参数的域的限制 $func = ...