1 条题解
-
1
思路
注意到数据范围很小,我们可以用
搜索
暴力解决。我们按照从左到右、从上到下的顺序一行一行逐个递归。如果一个数周围 个数都没被选过,我们就选择该数,并往下递归。然后不论该数是否选择,我们都要再按照不选的状态往下递归一次。AC Code
#include<bits/stdc++.h> #define ll long long using namespace std; const ll N=10; ll t,n,m,a[N][N],ans,d[8][2]={1,-1,-1,0,-1,1,0,-1,0,1,1,-1,1,0,-1,-1}; bool flag[N][N]; void dfs(ll x,ll y,ll cnt){ if(x==n+1){ ans=max(ans,cnt); return; } bool bo=1; for(ll i=0;i<8;i++) if(flag[x+d[i][0]][y+d[i][1]]){ bo=0; break; } if(bo){ flag[x][y]=1; y==m?dfs(x+1,1,cnt+a[x][y]):dfs(x,y+1,cnt+a[x][y]); flag[x][y]=0; } y==m?dfs(x+1,1,cnt):dfs(x,y+1,cnt); } int main(){ scanf("%lld",&t); for(ll i=1;i<=t;i++){ ans=LLONG_MIN; scanf("%lld%lld",&n,&m); for(ll i=1;i<=n;i++) for(ll j=1;j<=m;j++) scanf("%lld",&a[i][j]); dfs(1,1,0); printf("%lld\n",ans); } return 0; }
- 1
信息
- ID
- 743
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 5
- 标签
- 递交数
- 135
- 已通过
- 51
- 上传者