RE求调,玄关
查看原帖
RE求调,玄关
1412986
yuhanlinluogu楼主2024/11/11 22:49
#include<stdio.h>
int map[10][10],max;
bool mark[10][10];
int n,m;
bool check(int x,int y){
	return mark[x-1][y]&&mark[x][y]&&
			mark[x+1][y]&&mark[x-1][y-1]&&
	        mark[x][y-1]&&mark[x+1][y-1]&&
	        mark[x-1][y+1]&&mark[x][y+1]&&
			mark[x+1][y+1];
}
void dfs(int x,int y,int sum){
    if(x>=n+1)max=(max>sum?max:sum);
    if(check(x,y)){
        mark[x-1][y]=mark[x][y]=mark[x+1][y]=
        mark[x-1][y-1]=mark[x][y-1]=mark[x+1][y-1]=
        mark[x-1][y+1]=mark[x][y+1]=mark[x+1][y+1]=
        false;
        if(y==m)dfs(x+1,y,sum+map[x][y]);
        else dfs(x,y+1,sum+map[x][y]);
        mark[x-1][y]=mark[x][y]=mark[x+1][y]=
        mark[x-1][y-1]=mark[x][y-1]=mark[x+1][y-1]=
        mark[x-1][y+1]=mark[x][y+1]=mark[x+1][y+1]=
		true;
    }
    if(y==m)dfs(x+1,y,sum);
    else dfs(x,y+1,sum);
}
int main(){
    int T;scanf("%d",&T);
    for(int t=0;t<T;++t){
        scanf("%d %d",&n,&m);
        for(int i=0;i<10;++i)for(int j=0;j<10;++j)
            map[i][j]=0,mark[i][j]=true;
        max=0;
        for(int i=1;i<=n;++i)for(int j=1;j<=m;++j)
            scanf("%d",&map[i][j]);
        dfs(1,1,0);
        printf("%d",max);
    }
    return 0;
}
2024/11/11 22:49
加载中...