首页 > 代码库 > 洛谷 P1732 活蹦乱跳的香穗子

洛谷 P1732 活蹦乱跳的香穗子

题目描述

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

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

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

那么她最多能跳几次?

输入输出格式

输入格式:

 

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

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

 

输出格式:

 

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

 

输入输出样例

输入样例#1:
2 22 5-1 3
输出样例#1:
2

说明

n,m<=100

答案保证小于Maxlongint

 

屠龙宝刀点击就送

记忆化搜索 

#include <cstdio>long long f[1510][1510],value[1510][1510];long long n,m,maxn=-1;long long fx[5]={1,-1,0,0},fy[5]={0,0,-1,1};long long max(long long a,long long b){    return a>b?a:b;}long long qr(long long &x){    x=0;bool f=1;    char ch=getchar();    while(ch>9||ch<0)    {        if(ch==-) f=0;        ch=getchar();    }    while(ch>=0&&ch<=9)    {        x=x*10+(long long)ch-48;        ch=getchar();    }    x=f?x:(~x)+1;}long long dfs(long long u,long long v){    if(f[u][v]) return f[u][v];    long long p=0;    for(long long i=0;i<4;++i)    {        long long x=u+fx[i],y=v+fy[i];        if(x>=1&&x<=n&&y>=1&&y<=m&&value[x][y]>value[u][v])        p=max(dfs(x,y),p);    }    f[u][v]=p+1;    return f[u][v];}int main(){    qr(n);    qr(m);    for(long long i=1;i<=n;i++)        for(long long j=1;j<=m;++j)            qr(value[i][j]);    for(long long i=1;i<=n;i++)        for(long long j=1;j<=m;++j)            maxn=max(maxn,dfs(i,j));    printf("%lld",maxn-1);    return 0;}

 

洛谷 P1732 活蹦乱跳的香穗子