洛谷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 ...
随机推荐
- unity3D客户端框架
unity3D客户端框架 博客
- hashcat 中文文档
hashcat 描述 hashcat是世界上最快,最先进的密码恢复工具. 此版本结合了以前基于CPU的hashcat(现在称为hashcat-legacy)和基于GPU的oclHashcat. H ...
- XML文件怎么添加注释
注释以 <!-- 开始并以 --> 结束,例如 <!--注释内容-->. 注释可以出现在文档序言中,包括文档类型定义 (DTD):文档之后:或文本内容中. 注释不能出现在属 ...
- linux安装部署Nginx
两个参考地址: NGINX的百度百科:https://baike.baidu.com/item/nginx/3817705?fr=aladdin NGINX的中文网站:http://www.nginx ...
- 20165215 2017-2018-2 《Java程序设计》第7周学习总结
20165215 2017-2018-2 <Java程序设计>第七周学习总结 教材学习内容总结 chapter11 下载安装MySQL服务器 启动MySQL数据库服务器 在bin子目录中, ...
- 证券化代币的时代已经到来,STO将引爆区块链经济
STOs 似乎会在 2019 年取代 ICOs,即使不是完全取代,但置换的比例也会相当大.所有在美上市的公司都将按照 SEC 制定的相关规定进行交易.Vellum Capital 的 CEO 兼管理合 ...
- System.getSecurityManager()
https://www.cnblogs.com/yiwangzhibujian/p/6207212.html java安全管理器SecurityManager入门 一.文章的目的 这是一篇对Jav ...
- python 实现有序字典
python 实现有序字典 Python默认的字典,是不按顺序存储.输出我们添加在字典中的内容的,即是无序的字典.python 使用OrderedDict函数实现有序的字典. 示例: d = dict ...
- css 初级进阶
摘自:https://www.jianshu.com/p/dcc40ccc9841 CSS中级 Class和ID选择器 CSS初级教程中我们可以使用HTML标签选择器定义样式. 同样你也可以使用Cla ...
- 怎样从外网访问内网PostgreSQL数据库?
本地安装了一个PostgreSQL数据库,只能在局域网内访问到,怎样从外网也能访问到本地的PostgreSQL数据库呢?本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动PostgreSQ ...