50分求助!
查看原帖
50分求助!
1040519
lin_mine楼主2024/7/11 23:30

请大佬指教qwq

#include <bits/stdc++.h>
using namespace std;
int a[101][101],minn=0x3f3f3f3f,maxn=-0x3f3f3f3f,dx[]={0,-1,0,1},dy[]={-1,0,1,0},dp[101][101],mmax=-0x3f3f3f3f;
//  a为区域地图,minn和maxn标记最低点和最高点,     dx和dy表示方向,                 dp为路径长度,mmax作为最后输出
int main(){
    int r,c;//地图长宽
    cin>>r>>c;
    memset(a,0x3f3f3f,sizeof a);//初始化
    for(int i=1;i<=r;i++)//输入,并标记最低点和最高点
        for(int j=1;j<=c;j++){
            cin>>a[i][j];
            minn=min(minn,a[i][j]);
            maxn=max(maxn,a[i][j]);
        }
    for(int i=minn;i<=maxn;i++)//从最低点开始,到最高点结束
        for(int j=1;j<=r;j++)//记录坐标
            for(int k=1;k<=c;k++){
                if(a[j][k]==i){//如果该点高度与该坐标高度相同
                    int maax=-0x3f3f3f3f;//用来记录该点的最长路径
                    for(int i=0;i<4;i++){
                        int mx=j+dx[i],my=k+dy[i];//可以滑的四个点位的定义
                        if(a[j][k]>a[mx][my])//如果能滑
                            dp[j][k]=dp[mx][my]+1;//则该点的路径长度为滑向的点位的长度再加一
                        maax=max(dp[j][k],maax);//判断最长路径并记录
                    }
                    dp[j][k]=maax;//记录最长路径
                    if(i==minn)//最低点也可以看作是一条长度为一的路经
                        dp[j][k]++;
                    mmax=max(mmax,maax);//判断最长路径是否起始于该点
                }
            }
    cout<<mmax<<endl;//输出
    return 0;
}
2024/7/11 23:30
加载中...