lanqiaoOJ 211 剪格子

简介: lanqiaoOJ 211 剪格子

1.剪格子 - 蓝桥云课 (lanqiao.cn)      

这是一道dfs从左上角出发搜索所有的满足cnt = sum/2 的序列

剪枝:对于cnt > sum/2 的排序来说已经没有搜索的必要了 直接退回来就行了

注意是取最小值 , 对于满足的序列需要比较一下深度

#include<iostream>
#include<cstring>
#include<algorithm>
 
using namespace std ;
const int N = 20 ;
int a[N][N] ;
int n , m ; 
int sum ,cnt;
bool v[N][N] ;
int d[4][2] = {{0,1},{0,-1},{1,0},{-1,0}} ;
int ans = 100000 ;
void dfs(int u,int x, int y){
  
  if(cnt * 2 == sum){
    if(u < ans ) ans = u ;
    return ;
  }
  if(cnt * 2 > sum) return ;
  
  for(int i = 0 ; i < 4 ; i ++){
    int tx = x + d[i][0] , ty = y + d[i][1] ;
    if(tx < 0 || tx >= n || ty <0 || ty>=m) continue ;
    if(v[tx][ty]) continue ;
    v[tx][ty] = 1 ;
    cnt += a[tx][ty] ;
    dfs(u+1,tx,ty) ;
    v[tx][ty] = 0 ;
    cnt -= a[tx][ty] ;
  }
  
}
 
 
int main(){
  cin >> n >> m ;
  for(int i = 0 ; i < m ; i ++){
    for(int j = 0 ; j < n ; j ++){
      cin >> a[i][j] ;
      sum += a[i][j] ;
    }
  }
  
  cnt = a[0][0] ;
  v[0][0] = 1 ;
  dfs(1,0,0);
  if(ans != 100000) cout << ans << endl; 
  else cout << 0 << endl ;
//  int mid = sum / 2 ; if(sum%2!=0) cout << 0 << endl ;
  return 0 ;
}
目录
相关文章
|
机器学习/深度学习
1196:踩方格
1196:踩方格
118 0
|
机器学习/深度学习
剑指offer 13. 剪绳子
剑指offer 13. 剪绳子
74 0
AcWing——方格迷宫(有点不一样的迷宫问题)
AcWing——方格迷宫(有点不一样的迷宫问题)
93 0
LeetCode 1812. 判断国际象棋棋盘中一个格子的颜色
给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。
134 0
|
机器学习/深度学习
P4170 [CQOI2007]涂色
P4170 [CQOI2007]涂色
74 0
P4170 [CQOI2007]涂色
7-9 用天平找小球 (10 分)
7-9 用天平找小球 (10 分)
100 0
杭电OJ 2501 骨牌铺满方格 递推
杭电OJ 2501 骨牌铺满方格 递推
89 0