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 ;
}
相关文章
洛谷P1162 填涂颜色——广搜
洛谷P1162 填涂颜色——广搜
72 0
|
机器学习/深度学习
剑指offer 13. 剪绳子
剑指offer 13. 剪绳子
69 0
LeetCode 1812. 判断国际象棋棋盘中一个格子的颜色
给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。
118 0
P4170 [CQOI2007]涂色
P4170 [CQOI2007]涂色
66 0
P4170 [CQOI2007]涂色
7-9 用天平找小球 (10 分)
7-9 用天平找小球 (10 分)
92 0
|
算法 前端开发
火柴拼正方形
🎈每天进行一道算法题目练习,今天的题目是“火柴拼正方形”。
146 0
|
算法
[leetcode] 2055蜡烛之间的盘子 | 前缀和
在这里做出处理,让下标从1开始,询问的区间两端也+1 我们开两个数组: nearL 以及 nearR nearL[i] 表示:在i 位置离着最近的左边的 ∣符号是在哪一个下标 nearR[i] 表示:在i 位置离着最近的右边的 ∣符号是在哪一个下标 如果说 s[i] == '|' 那么说 nearL[i]=i 并且 nearR[i]=i 让左区间等于离着当前位置最近的右边的 | 让右区间等于离着当前位置最近的左边的 | 然后就可以直接开始 前缀和 了
95 0
[leetcode] 2055蜡烛之间的盘子 | 前缀和
|
存储
游戏测试中的哪些坑-背包格子问题
游戏中背包是很常见的系统,游戏的系统会投放各种各样的物品给玩家,存放在玩家的背包之中。背包可能会分几个类型,然后每个类型都可以存储一定数量的对应物品。一旦背包容量满了之后就无法再获得物品,例如无法领取任务奖励,无法拾取道具,无法购买道具等限制
524 0
游戏测试中的哪些坑-背包格子问题