一半tle。。。求助
  • 板块P1123 取数游戏
  • 楼主AdGats
  • 当前回复0
  • 已保存回复0
  • 发布时间2020/7/22 10:50
  • 上次更新2023/11/6 22:37:08
查看原帖
一半tle。。。求助
209758
AdGats楼主2020/7/22 10:50
#include<bits/stdc++.h>
using namespace std;
int n,m,sum,squ[10][10];
bool ma[10][10];
bool stop(){
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)	if(!ma[i][j])	return 0;
	return 1;
}
int read(){
	char c=getchar();
	int a=0;
	while(c<'0'||c>'9')	c=getchar();
	while(c>='0'&&c<='9')	a=a*10+c-'0',c=getchar();
	return a;
}
void dfs(int num){
	if(stop()){
		//cout<<num<<' '; 
		sum=max(sum,num);
		return ;
	}
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++){
			if(!ma[i][j]){
				ma[i][j]=1;
				bool i1=0,i2=0,i3=0,i4=0,i5=0,i6=0,i7=0,i8=0;
				if(!ma[i-1][j-1])	ma[i-1][j-1]=1,i1=1;
				if(!ma[i][j-1])	ma[i][j-1]=1,i2=1;
				if(!ma[i+1][j-1])	ma[i+1][j-1]=1,i3=1;
				if(!ma[i+1][j])	ma[i+1][j]=1,i4=1;
				if(!ma[i+1][j+1])	ma[i+1][j+1]=1,i5=1;
				if(!ma[i][j+1])	ma[i][j+1]=1,i6=1;
				if(!ma[i-1][j+1])	ma[i-1][j+1]=1,i7=1;
				if(!ma[i-1][j])	ma[i-1][j]=1,i8=1;
				dfs(num+squ[i][j]);
				ma[i][j]=0;
				if(i1)	ma[i-1][j-1]=0;
				if(i2)	ma[i][j-1]=0;
				if(i3)	ma[i+1][j-1]=0;
				if(i4)	ma[i+1][j]=0;
				if(i5)	ma[i+1][j+1]=0; 
				if(i6)	ma[i][j+1]=0;
				if(i7)	ma[i-1][j+1]=0;
				if(i8)	ma[i-1][j]=0;
			}
		}
}
int main(){
	int t,i;
	cin>>t;
	i=t;
	while(i){
		i--;		
		cin>>n>>m;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)	squ[i][j]=read();
		dfs(0);
		cout<<sum<<endl;
		sum=0;
		if(i<t)	memset(ma,0,sizeof(ma));	
	}
	return 0;
}
2020/7/22 10:50
加载中...