记忆化60WA1 5 8 10

P1434 [SHOI2002] 滑雪

ayszYW @ 2024-05-25 13:35:17

代码如下

#include<bits/stdc++.h>
using namespace std;
#define int long long
int r,c,arr[1000][1000],ans=0,v[1000][1000];

int dfs(int a,int b,int st,int l){
    if(arr[a][b]>=l)return st;
    if(a<1||a>r||b<1||b>c)return st;
    if(v[a][b])return v[a][b]+st;

    v[a][b]=max(max(dfs(a+1,b,st+1,arr[a][b]),dfs(a-1,b,st+1,arr[a][b])),max(dfs(a,b-1,st+1,arr[a][b]),dfs(a,b+1,st+1,arr[a][b])));
    return v[a][b];

}

signed main(){
    cin>>r>>c;
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++)cin>>arr[i][j];
    }
    for(int i=1;i<=r;i++){
        for(int j=1;j<=c;j++){
            ans=max(ans,dfs(i,j,0,9999999999999));
        }
    }
    cout<<ans;
}

by lishunjie @ 2024-06-03 20:48:11

记忆化传坐标过去就好了呀,传这么多干嘛,而且不用写成int函数,用void把值确定好后直接枚举找个最大值就行了,和深度搜索差不多


|