dfs25分蒟蒻求助
查看原帖
dfs25分蒟蒻求助
531258
Fishmaster楼主2021/10/13 19:10

大致看了一下题解,记忆化可以过的,但是我这个怎么只要 2525 分 qwq

#include<bits/stdc++.h>
using namespace std;
int n,m,ans=-999999999,arr[1005][1005],vis[1005][1005],vis2[1005][1005],ma[1005][1005];
void dfs(int x,int y,int sum){
	if(x==n&&y==m){
		ans=max(ans,sum);
		return;
	}
	if(vis2[x][y]&&sum<=ma[x][y])return;
	vis[x][y]=1;
	ma[x][y]=sum;
	if(x>1&&!vis[x-1][y]){
		dfs(x-1,y,sum+arr[x-1][y]);
	}
	if(x<n&&!vis[x+1][y]){
		dfs(x+1,y,sum+arr[x+1][y]);
	}
	if(y<m&&!vis[x][y+1]){
		dfs(x,y+1,sum+arr[x][y+1]);
	}
	vis[x][y]=0; 
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)cin>>arr[i][j];
	for(int i=1;i<=1001;i++)
		for(int j=1;j<=1001;j++)ma[i][j]=-999999999;
	dfs(1,1,arr[1][1]);
	cout<<ans;
	return 0;
} 

听说这道题要用 dp,但是本蒟蒻看不懂 dp 啊 qwq,教教我吧……

2021/10/13 19:10
加载中...