P1732 活蹦乱跳的香穗子

2018-06-17 22:18:24来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

题目描述

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

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

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

那么她最多能跳几次?

输入输出格式

输入格式:

 

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

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

 

输出格式:

 

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

 

输入输出样例

输入样例#1:
2 2
2 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 }

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:P1564 膜拜

下一篇:P1510 精卫填海