66分求助
  • 板块P1123 取数游戏
  • 楼主nikodo
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/18 21:29
  • 上次更新2023/11/18 21:31:50
查看原帖
66分求助
598875
nikodo楼主2023/11/18 21:29
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[7][7];
int cnt[7][7];
int maxn;
int dx[8]={-1,-1,-1,0,0,1,1,1},dy[8]={-1,0,1,-1,1,-1,0,1};
vector<int> v,v1;
void dfs(int x,int y,int ans){
	if(y==m+1){
		dfs(x+1,1,ans);
		return;
	}
	if(x==n+1){
		maxn=max(maxn,ans);
		return;
	}
	dfs(x,y+1,ans);
	if(!cnt[x][y]){
		for(int i=0;i<8;i++)cnt[x+dx[i]][y+dy[i]]++;
		dfs(x,y+1,ans+a[x][y]);
		for(int i=0;i<8;i++)cnt[x+dx[i]][y+dy[i]]--;
	}
	return;
}
void solve(){
	v=v1;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
			cnt[i][j]=0;
		}
	maxn=0;
	dfs(1,1,0);
	cout<<maxn<<'\n';
	return;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int T;
	cin>>T;
	while(T--)solve();
	return 0;
} 
2023/11/18 21:29
加载中...