开O2和不开O2错的点不一样?

P1434 [SHOI2002] 滑雪

Yikara @ 2021-08-23 08:35:45

#include<bits/stdc++.h>
using namespace std;
int Map[105][105],maxans=-99999;
int r,c;
void dfs(int x,int y,int ans){
    maxans=max(ans,maxans);
    if(Map[x-1][y]<Map[x][y])dfs(x-1,y,ans+1);
    if(Map[x+1][y]<Map[x][y])dfs(x+1,y,ans+1);
    if(Map[x][y+1]<Map[x][y])dfs(x,y+1,ans+1);
    if(Map[x][y-1]<Map[x][y])dfs(x,y-1,ans+1);
    return;
}
int main(){
    cin>>r>>c;
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            cin>>Map[i][j];
        }
    }
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            dfs(i,j,0);
        }
    }
    cout<<maxans;
    return 0;
}

by aSunnyDay @ 2021-08-23 08:42:05

dfs(i,j,1)把


by aSunnyDay @ 2021-08-23 08:42:59

这题要用记忆化搜索

f[i][j]代表i行j列开始划最多能划多少路程


by aSunnyDay @ 2021-08-23 08:43:40

你的dfs没有判断越界的情况


by aSunnyDay @ 2021-08-23 08:44:11

初始的时候x数组全部变成INF

然后输入试试看,应该就对了,但是不加记忆化可能会超时


by aSunnyDay @ 2021-08-23 08:44:21

@JoeBiden2020


by sc84bbs @ 2021-08-23 08:45:47

我们认为这是正常的


|