70pts记忆化搜索求助

P1508 Likecloud-吃、吃、吃

@[winds888](/user/664744) ```cpp #include<bits/stdc++.h> using namespace std; int n,m,i,j,ans=-99999999; int mp[205][205],f[205][205]; int dx[]={-1,-1,-1}; int dy[]={-1,0,1}; int dfs(int x,int y){ // printf("%d %d\n",x,y); if(x<1 || x>n || y<1 || y>m) return 0; if(f[x][y]!=-99999999) return f[x][y]; int p,q=-99999999; for(int i=0;i<=2;i++){ int nx=x+dx[i],ny=y+dy[i]; p=dfs(nx,ny)+mp[nx][ny]; q=max(q,p); } return f[x][y]=q; } signed main(){ for(i=1;i<=200;i++){ for(j=1;j<=200;j++) f[i][j]=-99999999; } scanf("%d%d",&n,&m); for(i=1;i<=n;i++){ for(j=1;j<=m;j++) scanf("%d",&mp[i][j]); } ans=max(ans,dfs(n,m/2)+mp[n][m/2]); // memset(f,-1,sizeof(f)); ans=max(ans,dfs(n,m/2+2)+mp[n][m/2+2]); // memset(f,-1,sizeof(f)); ans=max(ans,dfs(n,m/2+1)+mp[n][m/2+1]); printf("%d",ans); return 0; } ``` 改成这样就AC了
by z_y_ @ 2022-11-29 19:19:08


@[z_y_](/user/556472) 能证明一下正确性吗,谢谢
by Nwayy @ 2022-11-29 19:49:00


@[winds888](/user/664744) m为奇数,所以大餐桌的一侧的中点下边就是 $(n,m/2+1)$,而不是 $(n,m/2)$ 。
by z_y_ @ 2022-11-29 20:08:13


@[z_y_](/user/556472) 原来是这里错了,谢谢大佬。
by Nwayy @ 2022-11-29 21:37:13


|