1 solutions

  • 0
    @ 2026-4-23 17:12:00
    #include<bits/stdc++.h>
    using namespace std;
    const int N=10;
    int a[N][N];
    int st[N][N];
    int n,m,res;
    int dx[]={-1,-1,-1,0,0,1,1,1};
    int dy[]={-1,0,1,-1,1,-1,0,1};
    void dfs(int x,int y,int z)
    {
    	if(x==n+1) //行搜索结束 
    	{
    		res=max(res,z);
    		return ;
    	}
    	if(y==m+1) //应该搜索下一行 
    	{
    		dfs(x+1,1,z);
    		return ;
    	}
    	dfs(x,y+1,z); //不选当前行 
    	if(st[x][y]==0)
    	{
    	
    		for(int i=0;i<8;i++) //标记周围格子 
    		{
    			int xx=x+dx[i],yy=y+dy[i];
    			st[xx][yy]++;
    		}
    		dfs(x,y+1,z+a[x][y]); //下一行 
    		for(int i=0;i<8;i++) //清空标记 
    		{
    			int xx=x+dx[i],yy=y+dy[i];
    			st[xx][yy]--;
    		}
    	}
    	
    }
    int main()
    {
    	int t;
    	cin>>t;
    	while(t--)
    	{
    		cin>>n>>m;
    		res=0;
    		memset(st,0,sizeof st); //清空状态 
    		memset(a,0,sizeof a);
    		for(int i=1;i<=n;i++)
    		{
    			for(int j=1;j<=m;j++)
    			{
    				cin>>a[i][j];
    			}
    		}
    		dfs(1,1,0); 
    		cout<<res<<endl;
    	}
    	return 0;
    } 
    
    • 1

    Information

    ID
    3480
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    10
    Tags
    (None)
    # Submissions
    1
    Accepted
    1
    Uploaded By