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 ;
}
目录
相关文章
【Leetcode -766.托普利茨矩阵 -771.宝石与石头】
【Leetcode -766.托普利茨矩阵 -771.宝石与石头】
51 0
|
机器学习/深度学习
1347:【例4-8】格子游戏
1347:【例4-8】格子游戏
121 0
|
机器学习/深度学习
剑指offer 13. 剪绳子
剑指offer 13. 剪绳子
71 0
|
机器学习/深度学习
|
机器学习/深度学习 算法 Windows
LeetCode 452. 用最少数量的箭引爆气球(贪心算法)
LeetCode 452. 用最少数量的箭引爆气球(贪心算法)
105 0
P4170 [CQOI2007]涂色
P4170 [CQOI2007]涂色
71 0
P4170 [CQOI2007]涂色
7-9 用天平找小球 (10 分)
7-9 用天平找小球 (10 分)
97 0
|
算法 前端开发
火柴拼正方形
🎈每天进行一道算法题目练习,今天的题目是“火柴拼正方形”。
148 0
|
机器学习/深度学习
1036. 逃离大迷宫 : BFS + 给定障碍物所能围成的最大面积
1036. 逃离大迷宫 : BFS + 给定障碍物所能围成的最大面积