洛谷p1732 活蹦乱跳的香穗子 二维DP
今天不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的更多相关文章
- 洛谷 P1732 活蹦乱跳的香穗子
题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1次,且每个格子都有其价值 跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她 ...
- 2018.08.16 洛谷P1437 [HNOI2004]敲砖块(二维dp)
传送门 看起来普通dp" role="presentation" style="position: relative;">dpdp像是有后效性的 ...
- P1732 活蹦乱跳的香穗子
题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1次,且每个格子都有其价值 跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她 ...
- 【题解】洛谷P2822 [NOIP2016TG ]组合数问题 (二维前缀和+组合数)
洛谷P2822:https://www.luogu.org/problemnew/show/P2822 思路 由于n和m都多达2000 所以暴力肯定是会WA的 因为整个组合数是不会变的 所以我们想到存 ...
- 【洛谷 P2742】【模板】二维凸包
题目链接 二维凸包板子..有时间会补总结的. #include <cstdio> #include <cmath> #include <algorithm> usi ...
- 洛谷 P2216 [HAOI2007]理想的正方形 || 二维RMQ的单调队列
题目 这个题的算法核心就是求出以i,j为左上角,边长为n的矩阵中最小值和最大值.最小和最大值的求法类似. 单调队列做法: 以最小值为例: q1[i][j]表示第i行上,从j列开始的n列的最小值.$q1 ...
- 洛谷 P2038 无线网络发射器选址 —— 二维树状数组
题目:https://www.luogu.org/problemnew/show/P2038 大水题暴露出我的愚蠢. 用二维树状数组,然而居然忘了它应该那样写,调了一个小时: 正方形可以超出外面,只要 ...
- 洛谷 P1972 [SDOI2009]HH的项链-二维偏序+树状数组+读入挂(离线处理,思维,直接1~n一边插入一边查询),hahahahahahaha~
P1972 [SDOI2009]HH的项链 题目背景 无 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含 ...
- 【洛谷 P1452】 Beauty Contest (二维凸包,旋转卡壳)
题目链接 旋转卡壳模板题把. 有时间再补总结吧. #include <cstdio> #include <cmath> #include <algorithm> u ...
随机推荐
- 移动端点击返回时强制页面刷新解决办法(pageshow)
在做移动端项目的时候经常遇到这样一个功能比如: 返回后页面不刷新,一些失效的信息依然显示在页面上.这个问题在iphone手机上会出现,在Android手机上返回时会自动刷新(由于手机机器种类不多,无法 ...
- 世界最顶级邮件服务器组合Linux + PMTA + OEMPRO,PowerMTA 安装
世界最顶级邮件服务器组合Linux + PMTA + OEMPRO PowerMTA 安装 PMTA + OEMPRO 这个是发送的组合 PMTA提供的SMTP,OEMPRO是订阅管理以及邮件的过滤 ...
- 75.Java异常处理机制-手动抛出异常
package testDate; import java.io.File; import java.io.FileNotFoundException; public class TestReadFi ...
- router.go,router.push,router.replace的区别
除了使用 <router-link> 创建 a 标签来定义导航链接,我们还可以借助 router 的实例方法,通过编写代码来实现.当你点击 <router-link> 时,这个 ...
- jq如何获取服务器的时间
$.ajax({type:"OPTIONS",url:"/",complete:function(x){alert(x.getResponseHeader(&q ...
- String小案例(**)、包装类型和普通数据类型的转换(拆装箱)
###String用法: package StringTest; /**功能: * 判断Java文件名是否正确,判断邮箱格式是否正确 * 其中:合法的文件名应该以.java结尾 * 合法的邮箱名至少包 ...
- django 上传文件及反馈信息
from django.shortcuts import render,HttpResponse from django.views import View from Fiskars.models i ...
- Web安全学习笔记之更新kali国内源
vi /etc/apt/sources.list #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib ...
- 基于RHEL6.3 安装MySQL踩过的坑
MySQL版本:Percona-Server-5.6.29 OS:RHEL6.3 安装出错 [mysql@oracle ~]$ /home/mysql/scripts/mysql_install_db ...
- 获取ip,获取客户端浏览器,获取客户端访问操作系统,获取客户端访问设备
/** * 获取ip */ public static function getIp() { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CL ...