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 ;
}
目录
相关文章
|
机器学习/深度学习
1347:【例4-8】格子游戏
1347:【例4-8】格子游戏
147 0
求小球下落弹起的高度与路程
求小球下落弹起的高度与路程
168 0
|
机器学习/深度学习
剑指offer 13. 剪绳子
剑指offer 13. 剪绳子
86 0
LeetCode 1812. 判断国际象棋棋盘中一个格子的颜色
给你一个坐标 coordinates ,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。
150 0
|
C语言
国王的许诺 相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第1个格子中
国王的许诺 相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。这位聪明的宰相指着8×8共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第1个格子中
434 0
|
机器学习/深度学习
【每日一题Day50】LC1812判断国际象棋棋盘中一个格子的颜色 | 找规律
【每日一题Day50】LC1812判断国际象棋棋盘中一个格子的颜色 | 找规律
94 0
L1-015 跟奥巴马一起画方块 (15 分)
L1-015 跟奥巴马一起画方块 (15 分)
304 0
7-9 用天平找小球 (10 分)
7-9 用天平找小球 (10 分)
108 0