今天不BB了,直接帖原题吧  地址>>https://www.luogu.org/problem/show?pid=1732<<

题目描述

香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1次,且每个格子都有其价值

跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她只能往价值更高(这里是严格的大于)的格子跳.

香穗子可以从任意的格子出发,在任意的格子结束,

那么她最多能跳几次?

输入输出格式

输入格式:

第一行n,m,表示田野的长和宽

接下来n行,每行m个数,表示该格的价值


输出格式:

一个数,表示最多跳得次数

输入输出样例

输入样例#1:

2 2
2 5
-1 3
输出样例#1:

2

说明

n,m<=100

这是二维DP样板,是DP中的豪杰,相较普通DP,思路和顺序也有些变化.

这题里,搜索函数是核心内容,建立数学模型也是比较重要(洛谷题解中有多种模型,构建不同也导致他们后续主函数运算部分难易不一,但其实不关键,能写出来就够了)

下面是我构建的搜索函数(疯狂膜洛谷题解大佬):

int sgs(int i,int j)
{
int k=;
if(a[i][j]!=-) return a[i][j];
if(i->=&&map[i-][j]<map[i][j])
{
a[i][j]=max(a[i][j],sgs(i-,j)+);
k=;
}
if(j+<=m&&map[i][j+]<map[i][j])
{
a[i][j]=max(a[i][j],sgs(i,j+)+);
k=;
}
if(i+<=n&&map[i+][j]<map[i][j])
{
a[i][j]=max(a[i][j],sgs(i+,j)+);
k=;
}
if(j->=&&map[i][j-]<map[i][j])
{
a[i][j]=max(a[i][j],sgs(i,j-)+);
k=;
}
if(k==) a[i][j]=;
return a[i][j];
}

其中map是储存地图数字的数组,a是储存"跳到这个格子的最大次数",对每一个点map[i,j]讨论跳到这个点所需的最大步数,再在主函数中forfor遍历全图就可以找到答案.

函数的查找方法是对该点的上下左右询问,看是否有比该点数字小的点,如果有比他小的(即可从那个点跳到该点),就拿a[i,j]和a[那个点]+1来取最大值.

其中值得注意的一行:

if(a[i][j]!=-1) return a[i][j];
-1是在主函数中输入数据是赋值的.意为"未被询问的",被询问后就会有值(比大于0),依次区分,如果没有这行,那程序的运行会慢好多哦~~~
以下是ac代码:
#include<iostream>
using namespace std;
int max(int a,int b)
{
return a>b?a:b;
}
int map[101][101],a[101][101];
int n,m;
int sgs(int i,int j)
{
int k=0;
if(a[i][j]!=-1) return a[i][j];
if(i-1>=1&&map[i-1][j]<map[i][j])
{
a[i][j]=max(a[i][j],sgs(i-1,j)+1);
k=1;
}
if(j+1<=m&&map[i][j+1]<map[i][j])
{
a[i][j]=max(a[i][j],sgs(i,j+1)+1);
k=1;
}
if(i+1<=n&&map[i+1][j]<map[i][j])
{
a[i][j]=max(a[i][j],sgs(i+1,j)+1);
k=1;
}
if(j-1>=1&&map[i][j-1]<map[i][j])
{
a[i][j]=max(a[i][j],sgs(i,j-1)+1);
k=1;
}
if(k==0) a[i][j]=0;
return a[i][j];
}
int main()
{
int i,j,way=0;
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cin>>map[i][j];
a[i][j]=-1;
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
way=max(way,sgs(i,j));
cout<<way<<endl;
}

  注意边界的判断哦~(比心)

												

洛谷p1732 活蹦乱跳的香穗子 二维DP的更多相关文章

  1. 洛谷 P1732 活蹦乱跳的香穗子

    题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1次,且每个格子都有其价值 跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她 ...

  2. 2018.08.16 洛谷P1437 [HNOI2004]敲砖块(二维dp)

    传送门 看起来普通dp" role="presentation" style="position: relative;">dpdp像是有后效性的 ...

  3. P1732 活蹦乱跳的香穗子

    题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1次,且每个格子都有其价值 跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她 ...

  4. 【题解】洛谷P2822 [NOIP2016TG ]组合数问题 (二维前缀和+组合数)

    洛谷P2822:https://www.luogu.org/problemnew/show/P2822 思路 由于n和m都多达2000 所以暴力肯定是会WA的 因为整个组合数是不会变的 所以我们想到存 ...

  5. 【洛谷 P2742】【模板】二维凸包

    题目链接 二维凸包板子..有时间会补总结的. #include <cstdio> #include <cmath> #include <algorithm> usi ...

  6. 洛谷 P2216 [HAOI2007]理想的正方形 || 二维RMQ的单调队列

    题目 这个题的算法核心就是求出以i,j为左上角,边长为n的矩阵中最小值和最大值.最小和最大值的求法类似. 单调队列做法: 以最小值为例: q1[i][j]表示第i行上,从j列开始的n列的最小值.$q1 ...

  7. 洛谷 P2038 无线网络发射器选址 —— 二维树状数组

    题目:https://www.luogu.org/problemnew/show/P2038 大水题暴露出我的愚蠢. 用二维树状数组,然而居然忘了它应该那样写,调了一个小时: 正方形可以超出外面,只要 ...

  8. 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~

    P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...

  9. 【洛谷 P1452】 Beauty Contest (二维凸包,旋转卡壳)

    题目链接 旋转卡壳模板题把. 有时间再补总结吧. #include <cstdio> #include <cmath> #include <algorithm> u ...

随机推荐

  1. Windsor

    https://github.com/castleproject/Windsor https://github.com/castleproject/Windsor/blob/master/docs/R ...

  2. git克隆远程项目并创建本地对应分支

    http://jingyan.baidu.com/article/19192ad83ea879e53e5707ce.html

  3. python type的用法

    目录 描述 语法 用法 type和isinstance Type和Object 描述 python的 type 函数有两个用法,当只有一个参数的时候,返回对象的类型.当有三个参数的时候返回一个类对象. ...

  4. java加载配置文件信息

    #基金数据存放根目录fund_save_root_path=E:/fundCrawling #龙虎榜数据存放根目录long_hu_root_path=E:/longHuCrawling #巨潮数据存放 ...

  5. Com类型

    /* VARIANT STRUCTURE * * VARTYPE vt; * WORD wReserved1; * WORD wReserved2; * WORD wReserved3; * unio ...

  6. GoldenGate 12.3 MA架构介绍系列(3) - 各功能模块介绍

    在新版的ogg 12.3 microservice architect中,提供了4个不同的服务模块和命令行模块. Admin Server: 负责连接用户.trandata, checkpoint的添 ...

  7. Ubuntu16.04+cuda8.0rc+opencv3.1.0+caffe+Theano+torch7搭建教程

    https://blog.csdn.net/jywowaa/article/details/52263711 学习中用到深度学习的框架,需要搭建caffe.theano和torch框架.经过一个月的不 ...

  8. Python文件读写、StringIO和BytesIO

    1 IO的含义 在计算机中,IO是Input/Output的简写,也就是输入和输出. 由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就 ...

  9. selenium webdriver 实现Canvas画布自动化测试

    https://blog.csdn.net/xiaoguanyusb/article/details/80324210 由借鉴意义, 转过来 canvas 是一个画布,定位元素时只能定位到画布上,如下 ...

  10. jquery的$post方法不发送空数组的解决办法

    问题:jquery里的ajax在提交post请求时,如果数据里有一个空数组,则这个空数组不会提交上去 技术上的解决办法如下: 源代码: var params = { type : , ids:[] } ...