今天不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. 移动端点击返回时强制页面刷新解决办法(pageshow)

    在做移动端项目的时候经常遇到这样一个功能比如: 返回后页面不刷新,一些失效的信息依然显示在页面上.这个问题在iphone手机上会出现,在Android手机上返回时会自动刷新(由于手机机器种类不多,无法 ...

  2. 世界最顶级邮件服务器组合Linux + PMTA + OEMPRO,PowerMTA 安装

    世界最顶级邮件服务器组合Linux + PMTA + OEMPRO PowerMTA 安装 PMTA + OEMPRO  这个是发送的组合 PMTA提供的SMTP,OEMPRO是订阅管理以及邮件的过滤 ...

  3. 75.Java异常处理机制-手动抛出异常

    package testDate; import java.io.File; import java.io.FileNotFoundException; public class TestReadFi ...

  4. router.go,router.push,router.replace的区别

    除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现.当你点击 <router-link> 时,这个 ...

  5. jq如何获取服务器的时间

    $.ajax({type:"OPTIONS",url:"/",complete:function(x){alert(x.getResponseHeader(&q ...

  6. String小案例(**)、包装类型和普通数据类型的转换(拆装箱)

    ###String用法: package StringTest; /**功能: * 判断Java文件名是否正确,判断邮箱格式是否正确 * 其中:合法的文件名应该以.java结尾 * 合法的邮箱名至少包 ...

  7. django 上传文件及反馈信息

    from django.shortcuts import render,HttpResponse from django.views import View from Fiskars.models i ...

  8. Web安全学习笔记之更新kali国内源

    vi /etc/apt/sources.list #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib ...

  9. 基于RHEL6.3 安装MySQL踩过的坑

    MySQL版本:Percona-Server-5.6.29 OS:RHEL6.3 安装出错 [mysql@oracle ~]$ /home/mysql/scripts/mysql_install_db ...

  10. 获取ip,获取客户端浏览器,获取客户端访问操作系统,获取客户端访问设备

    /** * 获取ip */ public static function getIp() { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CL ...