滑雪

题目描述:
 trs喜欢滑雪。他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形。为了得到更快的速度,滑行的路线必须向下倾斜。
大致思路:
利用宽度优先搜索和记忆化搜索,就可以解决问题。深搜似乎也行。代码是在linux下写的,换行符不兼容。
代码:
#include<cstdio>


#include<cstring>


using namespace std;


int map[110][110],ans[110][110];


int r,c;
bool f[110][110];


int max(int a,int b)


{
    return a>b?a:b;
}


int cal(int a,int b)


{
    
int tmp=0,ab=map[a][b];
   
if (f[a][b]) return ans[a][b];
    
f[a][b]=true;
    
if (a<r&&map[a+1][b]<ab) tmp=max(tmp,cal(a+1,b)+1);
    
if (a>1&&map[a-1][b]<ab) tmp=max(tmp,cal(a-1,b)+1);
    
if (b<c&&map[a][b+1]<ab) tmp=max(tmp,cal(a,b+1)+1);
    
if (b>1&&map[a][b-1]<ab) tmp=max(tmp,cal(a,b-1)+1);
    
ans[a][b]=tmp;
    
return ans[a][b];


}


int main()


{
    
int aa=0;
    
scanf("%d%d",&r,&c);
    
for (int i=1;i<=r;i++)
        
for (int j=1;j<=c;j++)
            
scanf("%d",&map[i][j]);
    
memset(ans,0,sizeof(ans));
    
for (int i=1;i<=r;i++)
        
for (int j=1;j<=c;j++)
            
aa=max(aa,cal(i,j));
    
printf("%d",aa+1);


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值