求助,还有人在吗
  • 板块P1123 取数游戏
  • 楼主Kobe303
  • 当前回复17
  • 已保存回复17
  • 发布时间2020/8/27 19:51
  • 上次更新2023/11/5 14:11:46
查看原帖
求助,还有人在吗
292300
Kobe303楼主2020/8/27 19:51
#include<iostream> 
#include<string>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
int t,n,m;
int mp[8][8];
const int d[8][2]={1,0,-1,0,0,1,0,-1,1,1,-1,1,1,-1,-1,-1};
int vis[8][8];
int sum;
int maxn;
void dfs(int x,int y)
{
	if(y==m+1)
	{
		dfs(x+1,1);
		return;
	}
	if(x==n+1)
	{
		maxn=max(sum,maxn);
		return;
	}
	dfs(x,y+1);
	if(vis[x][y]==0)
	{
		sum+=mp[x][y];
		for(int i=0;i<8;++i)
			++vis[x+d[i][0]][y+d[i][1]];
		dfs(x,y+1);
		for(int i=0;i<8;++i)
			--vis[x+d[i][0]][y+d[i][1]];
		sum-=mp[x][y];
	}
}
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		memset(mp,0,sizeof(mp));
		memset(vis,0,sizeof(vis));
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;++i)
			for(int j=1;j<=m;++j)
				scanf("%d",&mp[i][j]);
		maxn=0;
		dfs(1,1);
		printf("%d\n",maxn);
	}
	
	
	
	
	return 0;
}

这是正确代码

#include<iostream> 
#include<string>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
int t,n,m;
int mp[8][8];
const int d[8][2]={1,0,-1,0,0,1,0,-1,1,1,-1,1,1,-1,-1,-1};
bool vis[8][8];
int sum;
int maxn;
void dfs(int x,int y)
{
	if(y==m+1)
	{
		dfs(x+1,1);
		return;
	}
	if(x==n+1)
	{
		maxn=max(sum,maxn);
		return;
	}
	dfs(x,y+1);
	if(vis[x][y]==false)
	{
		sum+=mp[x][y];
		for(int i=0;i<8;++i)
			vis[x+d[i][0]][y+d[i][1]]=true;
		dfs(x,y+1);
		for(int i=0;i<8;++i)
			vis[x+d[i][0]][y+d[i][1]]=false;
		sum-=mp[x][y];
	}
}
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		memset(mp,0,sizeof(mp));
		memset(vis,0,sizeof(vis));
		scanf("%d%d",&n,&m);
		for(int i=1;i<=n;++i)
			for(int j=1;j<=m;++j)
				scanf("%d",&mp[i][j]);
		maxn=0;
		dfs(1,1);
		printf("%d\n",maxn);
	}
	
	
	
	
	return 0;
}

这是错误代码 问一下Vis数组为什么会错? 谢谢

2020/8/27 19:51
加载中...