求助,为什么DFS错了
查看原帖
求助,为什么DFS错了
359748
Australia楼主2021/10/10 20:29
#include <bits/stdc++.h>
using namespace std;
long long q[3]={0,1,0},p[3]={0,0,1};
long long n,i,j,g[200][200],ans=-0x3f3f3f3f;
long long f[15][15][15][15],a,b,c,d;
long long w1;
void dfs(long long x1,long long y1,long long x2,long long y2,long long sum)
{   
    int i,j;
    if(f[x1][y1][x2][y2]>=sum)return;
    f[x1][y1][x2][y2]=sum;
    ans=max(ans,sum);
	if(x1==n&&y1==n||x2==n&&y2==n)
	{
	    ans=max(ans,sum);
		return;
	}
    else for(i=1;i<=2;i++)
	{
		a=x1+q[i];
		b=y1+p[i];
		if(a<=n&&b<=n)
		{
			for(j=1;j<=2;j++)
		    {
			    c=x2+q[j];
			    d=y2+p[j];
			    if(c<=n&&d<=n)
				{
				    if(a==c&&b==d)w1=sum+g[a][b];
				    else w1=sum+g[a][b]+g[c][d];
					dfs(a,b,c,d,w1);
				}
		    }
		}
	}
}
long long u,v,w;
int main()
{
	cin>>n;
	memset(f,-1,sizeof(f));
	memset(g,0,sizeof(g));
	cin>>u>>v>>w;
	while(u!=0&&v!=0&&w!=0)
	{
		g[u][v]=w;
		cin>>u>>v>>w;
	}
	dfs(1,1,1,1,g[1][1]);
	cout<<ans;
	return 0;
}

2021/10/10 20:29
加载中...