水题20pts求助
查看原帖
水题20pts求助
654577
RainySoul楼主2023/7/27 08:32

两遍暴力dfs,为什么这种做法是错误的

#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
const int N=30,fx[2]={0,1},fy[2]={1,0};
int ans=-1,n,x,y,z,a[N][N];
void dfs(int x,int y,int sum,bool flag){
//	cout<<"dfs("<<x<<","<<y<<","<<sum<<","<<flag<<")\n";
	if(x==n&&y==n){
		if(flag==0)dfs(1,1,sum,1);
		else{
			ans=max(ans,sum);
			return;
		}
	}
	for(int i=0;i<2;i++){
		int nx=x+fx[i],ny=y+fy[i];
		if(nx>n||ny>n)continue;
		int temp=a[nx][ny];
		a[nx][ny]=0;
		dfs(nx,ny,sum+temp,flag);
		a[nx][ny]=temp;
	}
}
int main(){
	cin>>n;
	while(cin>>x>>y>>z){
		if(x==0&&y==0&&z==0)break;
		a[x][y]=z;
	}
	dfs(1,1,0,0);
	cout<<ans;
	return 0;
}
2023/7/27 08:32
加载中...