50分求助!

P1434 [SHOI2002] 滑雪

lin_mine @ 2024-07-11 23:30:57

请大佬指教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;
}

by return_second @ 2024-07-18 20:46:39

是不是MLE


by lin_mine @ 2024-07-31 22:43:15

@return_second #2#10RE #1#4#6WA


|