记忆化搜索TLE一个点求助DaLaos

P1434 [SHOI2002] 滑雪

Clay_L @ 2023-01-31 11:24:28

代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,a[111][111],f[111][111],ans;
int dx[5]={-1,0,1,0,0},dy[5]={0,1,0,-1,0};
int dfsp(int x,int y)
{
    int t=f[x][y],xx,yy;
    if(t!=-1) return t;
    t=1;
    for(int i=0;i<4;i++)
    {
        xx=x+dx[i],yy=y+dy[i];
        if((xx<1||xx>n||yy<1||yy>m)||a[x][y]<=a[xx][yy]) continue;
        t=max(t,dfsp(xx,yy)+1);
    }
    return t;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j],f[i][j]=-1;
    for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) ans=max(ans,dfsp(i,j));
    cout<<ans<<endl;
    return 0;
}

by Clay_L @ 2023-01-31 11:59:52

是 #2 TLE


by Siegerkranz_2735 @ 2023-01-31 12:04:03

改了一下记忆化 现在ac了

#include<bits/stdc++.h>
using namespace std;
const int N=105;
const int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0};
int n,m,ans;
int a[N][N],f[N][N];
int dfs(int x,int y){
    if (f[x][y]>0) return f[x][y];
    int res=1;
    for (int i=0;i<=3;i++){
        int tx=x+dx[i],ty=y+dy[i];
        if (tx>=1&&tx<=n&&ty>=1&&ty<=m&&a[x][y]>a[tx][ty])res=max(res,dfs(tx,ty)+1);
    }
    f[x][y]=res;
    return f[x][y];
}
int main(){
    cin>>n>>m;
    for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)cin>>a[i][j];   
    for (int i=1;i<=n;i++)for (int j=1;j<=m;j++)ans=max(ans,dfs(i,j));
    cout<<ans;
    return 0;
}

by Siegerkranz_2735 @ 2023-01-31 12:04:21

@TechnobladePlus


by ttltony @ 2023-01-31 13:28:18

@2735 刚刚跟我发的?是什么意思啊,问一下


by Clay_L @ 2023-01-31 13:32:14

@2735 感谢dalao,此题已过


by Siegerkranz_2735 @ 2023-01-31 13:38:33

@ttltony 我不理解你为什么要骂楼主 代码不会调为什么不能发贴子


by ttltony @ 2023-01-31 13:40:35

@2735 他就坐我旁边,不直接问我还来发帖子


by Clay_L @ 2023-01-31 13:54:17

@ttltony 好像是你不告诉我吧。。。。。。。


by Clay_L @ 2023-01-31 13:54:57

@ttltony 都问你几次了


by ttltony @ 2023-01-31 13:56:51

@TechnobladePlus 明明是你说自己连bfs都不会,我都不想教你了(我做你旁边,你还要来这里说,直接跟我说不就行了)


上一页 | 下一页