Description
New game是在一个M*M的特殊棋盘(棋盘的第i行都标上了数字i)上进行的新式游戏。给定一个数字N,要求选手把一个棋子从左上角(1,1)移到右下角(M,M),移动时只能往右或往下。要求移动后经过的数字和为N,且拐弯的次数最少。
如果对给出的N,选手不能找出移动方案使得经过的数字和为N或找出的路径拐弯次数不是最少,选手就输了。所以,选手一定千方百计要找出满足条件的路径!!
Input
两个正整数M,N(其中M<=16),数据保证有解。
Output
最少拐弯数。
Sample
Input
4 22
Output
1

#include<bits/stdc++.h>#define INF 0x3f3f3f3f
using namespace std;const int N = 35;int m, n;
int book[N][N];
int mp[N][N];
int dir[2][2] = {{1, 0}, {0, 1}};
int minn;void DFS(int x, int y, int flag, int id, int cnt)
{if(id > minn)  //最优剪return ;if(cnt > n)   //可行剪return ;if(x == m && y == m){if(cnt == n){minn = min(minn, id);}return ;}for(int i = 0; i < 2; i++){int xx = x + dir[i][0];int yy = y + dir[i][1];if(xx >= 1 && xx <= m && yy >= 1 && yy <= m && !book[xx][yy]){book[xx][yy]=1;if(cnt == 1){DFS(xx, yy, i, id, cnt + mp[xx][yy]);}else{if(i != flag)DFS(xx, yy, i, id + 1, cnt + mp[xx][yy]);elseDFS(xx, yy, i, id, cnt + mp[xx][yy]);}book[xx][yy] = 0;}}
}void init()
{for(int i = 1; i <= m; i++){for(int j = 1; j <= m; j++)mp[i][j] = i;}
}
int main()
{while(cin >> m >> n){memset(book, 0, sizeof(book));init();book[1][1] = 1;minn = INF;DFS(1, 1, 0, 0, 1);cout << minn << endl;}return 0;
}

N - New Game(DFS+剪枝)相关推荐

  1. POJ2688状态压缩(可以+DFS剪枝)

    题意:       给你一个n*m的格子,然后给你一个起点,让你遍历所有的垃圾,就是终点不唯一,问你最小路径是多少? 思路:       水题,方法比较多,最省事的就是直接就一个BFS状态压缩暴搜就行 ...

  2. poj2362 DFS+剪枝

    题大致做法就是对所有小棒子长度求和sum,sum就是正方形的周长,sum/4就是边长side. 问题就转变为:这堆小棒子能否刚好组合成为4根长度均为side的大棒子 不难了解,小棒子的长度越长,其灵活 ...

  3. [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]

    [问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...

  4. 【HDU - 1518】Square (经典的dfs + 剪枝)

    题干: Given a set of sticks of various lengths, is it possible to join them end-to-end to form a squar ...

  5. [DFS|剪枝] leetcode 22 括号生成

    [DFS|剪枝] leetcode 22 括号生成 1.题目 题目链接 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合. 示例: 输入:n = 3 输出:[& ...

  6. poj2248 DFS+剪枝 or BFS

    传送门 2248:Addition Chains 描述 An addition chain for n is an integer sequence with the following four p ...

  7. 2020 ICPC 南京 H Harmonious Rectangle (DFS剪枝+思维)

    题目链接H-Harmonious Rectangle_第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京) 题目描述 A vertex-colored rectangle is a rec ...

  8. DFS(剪枝与优化) - 洛谷 P1361 - 小猫爬山

    DFS(剪枝与优化) - 洛谷 P1361 - 小猫爬山 翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_&l ...

  9. 洛谷 P1433 吃奶酪 dfs剪枝

    洛谷 P1433 吃奶酪 dfs剪枝 题解: dfs+剪枝,不过现在好像被卡时间了,第10个点过不了.. 代码如下: #include<iostream> #include<algo ...

  10. 牛客算法周周练17D - 刺客信条(dfs剪枝 | 优先队列 + bfs)

    题目大意: 给出一张n * m的地图,每经过一个建筑都需要一定的时间,而经过ABC要花费100,要求输出从S到E的最短时间. 解题思路: 思路一:dfs剪枝 输入地图的时候用char输入,然后转成in ...

最新文章

  1. 证明实对称正定矩阵A的Gauss-Seidel法必定收敛(完整过程)
  2. 网站关键词优化如何控制其密度?
  3. python3 第三十四章 - 聊聊File对象
  4. Java学习笔记---IO操作
  5. 计算机领域专业术语中英文对照(时常更新)
  6. lm opencv 算法_Levenberg–Marquardt算法学习(和matlab的LM算法对比)
  7. cc2530设计性实验代码三
  8. RANSAC算法详解+Python实现
  9. 手动设置ip 访问内网地址
  10. 迟到的Meltdown/Spectre分析
  11. php计算跨月请假天数,计算请假天数JavaScript方法
  12. java二重积分_《University Calculus》-chaper13-多重积分-二重积分的引入
  13. wos 文献被引_WoS和ESI数据库高被引论文的界定.pdf
  14. HTTP之proxy
  15. 联想电脑 恢复键盘F1-F12按键的标准功能
  16. JAVA 编程专业词语解释~~映射
  17. 软考视频总结——环环相扣
  18. 【C语言】实现一个函数,可以左旋字符串中的K个字符
  19. oracle中SQL的加号含义
  20. 阿里云服务器ECS年终特惠,云服务器报价出炉

热门文章

  1. Docker源码分析(四):Docker Daemon之NewDaemon实现
  2. Linux下C语言的调试--转
  3. Keras中Callback函数的使用
  4. 数字线索: F-35单价已低于四代机,其成本控制是如何实现的?
  5. 国家新一代人工智能开放创新平台将参加重庆智博会
  6. 凭什么还能独吞iPhone 8的“芯”?
  7. Java 8 - 收集器Collectors_分区partitioningBy
  8. 运行vc++6.0出现Error spawning cl.exe问题解决方法
  9. mysql内置多个数据存储引擎_一个mysql数据库,既有myisam存储引擎,又有innodb存储引擎,参数如...
  10. redmine 配置