首页 > 代码库 > P1732 活蹦乱跳的香穗子
P1732 活蹦乱跳的香穗子
题目描述
香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1次,且每个格子都有其价值
跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她只能往价值更高(这里是严格的大于)的格子跳.
香穗子可以从任意的格子出发,在任意的格子结束,
那么她最多能跳几次?
输入输出格式
输入格式:
第一行n,m,表示田野的长和宽
接下来n行,每行m个数,表示该格的价值
输出格式:
一个数,表示最多跳得次数
输入输出样例
输入样例#1:
2 22 5-1 3
输出样例#1:
2
说明
n,m<=100
答案保证小于Maxlongint
决定了,
以后能写记忆化搜索的写记忆化搜索
不能写记忆化搜索的也写记忆化搜索!
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<queue> 6 #include<algorithm> 7 #define lli long long int 8 using namespace std; 9 const int MAXN=101;10 void read(lli &n)11 {12 char c=‘+‘;lli x=0;bool flag=0;13 while(c<‘0‘||c>‘9‘)14 {c=getchar();if(c==‘-‘)flag=1;}15 while(c>=‘0‘&&c<=‘9‘)16 {x=x*10+(c-48);c=getchar();}17 flag==1?n=-x:n=x;18 }19 lli n,m;20 lli map[MAXN][MAXN];21 lli ans[MAXN][MAXN];22 lli xx[5]={-1,+1,0,0};23 lli yy[5]={0,0,-1,+1};24 lli M_S(lli x,lli y)25 {26 if(ans[x][y])27 return ans[x][y];28 for(lli i=0;i<4;i++)29 {30 lli wx=x+xx[i];31 lli wy=y+yy[i];32 if(map[wx][wy]>map[x][y]&&wx>=1&&wy>=1&&wx<=n&&wy<=m)33 ans[x][y]=max(ans[x][y],M_S(wx,wy)+1);34 }35 return ans[x][y];36 }37 int main()38 {39 read(n);read(m);40 for(lli i=1;i<=n;i++)41 for(lli j=1;j<=m;j++)42 read(map[i][j]);43 for(lli i=1;i<=n;i++)44 for(lli j=1;j<=m;j++)45 if(!ans[i][j])46 M_S(i,j);47 lli out=-1;48 for(lli i=1;i<=n;i++)49 for(lli j=1;j<=m;j++)50 out=max(out,ans[i][j]);51 printf("%d",out);52 return 0;53 }
P1732 活蹦乱跳的香穗子
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。