1 solutions
-
0
#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