大佬们帮忙看看为什么q数组不能用bool类型,而要用int类型?
  • 板块P1123 取数游戏
  • 楼主lvmoya
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/7/19 09:24
  • 上次更新2023/11/4 14:13:26
查看原帖
大佬们帮忙看看为什么q数组不能用bool类型,而要用int类型?
420646
lvmoya楼主2021/7/19 09:24
#include <bits/stdc++.h>
using namespace std;

int d[8][2]={1,0,-1,0,0,1,0,-1,1,1,-1,1,1,-1,-1,-1},s[8][8],q[8][8];
int t,n,m,ans,maxn=-1;

void dfs(int x,int y){
	if(y==m+1){
		dfs(x+1,1);
		return ;
	}
	if(x==n+1){
		maxn=max(ans,maxn);
		return ;
	}
	dfs(x,y+1);
	if(q[x][y]==0){
		ans+=s[x][y];
		for(int i=0;i<=7;i++){
		    q[x+d[i][0]][y+d[i][1]]++;
	    }
	    dfs(x,y+1);
        for(int i=0;i<=7;i++){
		    q[x+d[i][0]][y+d[i][1]]--;
	    }
	    ans-=s[x][y];
	}
		
}

int main(){
	cin>>t;
	while(t--){
		ans=0;
		memset(s,0,sizeof(s));
		memset(q,0,sizeof(q));
		cin>>n>>m;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>s[i][j];
			}
		}
		dfs(1,1);
		cout<<maxn<<endl;
		maxn=-1;
	}
	return 0;
}
#include <bits/stdc++.h>
using namespace std;

int d[8][2]={1,0,-1,0,0,1,0,-1,1,1,-1,1,1,-1,-1,-1},s[8][8];
bool q[8][8];
int t,n,m,ans,maxn=-1;

void dfs(int x,int y){
	if(y==m+1){
		dfs(x+1,1);
		return ;
	}
	if(x==n+1){
		maxn=max(ans,maxn);
		return ;
	}
	dfs(x,y+1);
	if(q[x][y]==0){
		ans+=s[x][y];
		for(int i=0;i<=7;i++){
		    q[x+=d[i][0]][y+=d[i][1]]=true;
	    }
	    dfs(x,y+1);
	    for(int i=0;i<=7;i++){
		    q[x+=d[i][0]][y+=d[i][1]]=false;
	    }
	    ans-=s[x][y];
	}	
}

int main(){
	cin>>t;
	while(t--){
		ans=0;
		maxn=-1;
		memset(s,0,sizeof(s));
		memset(q,0,sizeof(q));
		cin>>n>>m;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>s[i][j];
			}
		}
		dfs(1,1);
		cout<<maxn<<endl;
	}
	return 0;
}

以上为两种类型

2021/7/19 09:24
加载中...