这两份代码有区别吗
查看原帖
这两份代码有区别吗
292300
Kobe303楼主2020/11/8 18:57
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[1010][1010];
bool vis[1010][1010];
int f[1010][1010];
int dx[3]={1,-1,0};
int dy[3]={0,0,1};
const int oo=1000000000;
bool IsCanDfs=false;
void dfs(int x,int y,int sum)
{
	if(vis[x][y])return;
	if(x<1||x>n||y<1||y>m)return;
	sum+=a[x][y];
	if(f[x][y]>=sum&&!(IsCanDfs))return;
	if(f[x][y]<sum)f[x][y]=sum;
	vis[x][y]=true;
	for(int i=0;i<3;++i)
		dfs(x+dx[i],y+dy[i],sum);
	vis[x][y]=false;
}
int main()
{
//	freopen("number.in","r",stdin);
//	freopen("number.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
		{
			scanf("%d",&a[i][j]);
			f[i][j]=-oo;
		}
	if(n*m<=50)IsCanDfs=true;
	dfs(1,1,0);
	printf("%d",f[n][m]);
//	fclose(stdin);fclose(stdout);
	return 0;
}

25pts

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[1010][1010];
bool vis[1010][1010];
int f[1010][1010];
int dx[3]={1,-1,0};
int dy[3]={0,0,1};
const int oo=1000000000;
void dfs(int x,int y,int sum)
{
	if(vis[x][y])return;
	if(x<1||x>n||y<1||y>m)return;
	sum+=a[x][y];
	if(f[x][y]>=sum)return;
	if(f[x][y]<sum)f[x][y]=sum;
	vis[x][y]=true;
	for(int i=0;i<3;++i)
		dfs(x+dx[i],y+dy[i],sum);
	vis[x][y]=false;
}
int main()
{
//	freopen("number.in","r",stdin);
//	freopen("number.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
		{
			scanf("%d",&a[i][j]);
			f[i][j]=-oo;
		}
	dfs(1,1,0);
	printf("%d",f[n][m]);
//	fclose(stdin);fclose(stdout);
	return 0;
}

20pts

2020/11/8 18:57
加载中...