深搜30分求调
查看原帖
深搜30分求调
1014241
youluomingdaxian楼主2024/8/6 15:17
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mx=1e2;

int mp[mx][mx];
int m,n;
int man;

void dfs(int val,int x,int y,bool situ){
	if((x==1)&&(y==1)&&(!situ)){
		dfs(val,1,1,1);
	}
	if((x==m)&&(y==n)&&(situ)){
		man=max(man,val);
	}
	if((x>m)||(x<1)||(y>m)||(y<1)||(mp[x][y]==-1)){
		return;
	}
	val+=mp[x][y];
	int wcis=mp[x][y];
	mp[x][y]=-1;
	if((x==1)&&(y==1)&&(!situ)){
		dfs(val,1,1,1);
	}
	else if(situ){
		dfs(val,x+1,y,situ);
		dfs(val,x,y+1,situ);
	}
	else{
		dfs(val,x-1,y,situ);
		dfs(val,x,y-1,situ);
	}
	mp[x][y]=wcis;
	return;
}

signed main(){
	cin>>m>>n;
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			scanf("%d",&mp[i][j]);
		}
	}
	dfs(0,m,n,0);

	cout<<man;
	return 0;
}
2024/8/6 15:17
加载中...