总的来讲,这是一道很⑨的题,因为:

(1)题目中有⑨个挂钟

(2)有⑨种操作方案

(3)这题因为解空间太小所以可以直接⑨重循环!!

这题可以用迭代加深搜索高效求解,剪枝的策略也很显然:

>所求的操作序列一定是单调不递减的

>同一操作不可能在解中出现4次及以上(操作4次等于没有操作)

代码:

 #include <cstdio>
 #include <cstring>
 #include <algorithm>

 using namespace std;

 ]={};
 ]={};
 ]={};

 void move(int _cmd)
 {
     ++cmdCnt[_cmd];

     switch(_cmd)
     {
     : ++dir[]; ++dir[]; ++dir[]; ++dir[]; break;
     : ++dir[]; ++dir[]; ++dir[]; break;
     : ++dir[]; ++dir[]; ++dir[]; ++dir[]; break;
     : ++dir[]; ++dir[]; ++dir[]; break;
     : ++dir[]; ++dir[]; ++dir[]; ++dir[]; ++dir[]; break;
     : ++dir[]; ++dir[]; ++dir[]; break;
     : ++dir[]; ++dir[]; ++dir[]; ++dir[]; break;
     : ++dir[]; ++dir[]; ++dir[]; break;
     : ++dir[]; ++dir[]; ++dir[]; ++dir[]; break;
     }
 }

 void undo(int _cmd)
 {
     --cmdCnt[_cmd];

     switch(_cmd)
     {
     : --dir[]; --dir[]; --dir[]; --dir[]; break;
     : --dir[]; --dir[]; --dir[]; break;
     : --dir[]; --dir[]; --dir[]; --dir[]; break;
     : --dir[]; --dir[]; --dir[]; break;
     : --dir[]; --dir[]; --dir[]; --dir[]; --dir[]; break;
     : --dir[]; --dir[]; --dir[]; break;
     : --dir[]; --dir[]; --dir[]; --dir[]; break;
     : --dir[]; --dir[]; --dir[]; break;
     : --dir[]; --dir[]; --dir[]; --dir[]; break;
     }
 }

 inline bool isDest()
 {
     ;i<=;i++) ) return false;
     return true;
 }

 bool search_aux(int _maxDepth,int _curDepth,int _lastCmd)
 {
     if(isDest()) return true;
     if(_curDepth > _maxDepth) return false;

     ;i++)
     {
         )
         {
             move(i);
             ,i);
             undo(i);
             if(next) { ++ans[i]; return true; }
         }
     }

     return false;
 }

 void input()
 {
     ;i<=;i++) scanf("%d",dir+i);
 }

 void search()
 {
     ;;i++) ,)) return;
 }

 void printAns()
 {
     ;i<=;i++)
         while(ans[i]--) printf("%d ",i);
 }

 int main()
 {
     input();
     search();
     printAns();
     ;
 }

Cirno is willing to try this problem (*^__^*)

IOI1994 北京2008的挂钟 迭代加深的更多相关文章

  1. vijosP1016 北京2008的挂钟

    vijosP1016 北京2008的挂钟 题目链接:https://vijos.org/p/1016 [思路] Dfs. 对操作搜索更加优秀,所以采用搜索每一个操作的使用次数,因为操作数为4则相当于没 ...

  2. Vijos——T 1016 北京2008的挂钟 || 洛谷—— P1213 时钟

    https://www.luogu.org/problem/show?pid=1213 题目描述 考虑将如此安排在一个 3 x 3 行列中的九个时钟: 目标要找一个最小的移动顺序将所有的指针指向12点 ...

  3. POJ1129Channel Allocation[迭代加深搜索 四色定理]

    Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14601   Accepted: 74 ...

  4. BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1800  Solved: 984[Submit][Statu ...

  5. 迭代加深搜索 POJ 1129 Channel Allocation

    POJ 1129 Channel Allocation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14191   Acc ...

  6. 迭代加深搜索 codevs 2541 幂运算

    codevs 2541 幂运算  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 从m开始,我们只需要6次运算就可以计算出 ...

  7. HDU 1560 DNA sequence (IDA* 迭代加深 搜索)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1560 BFS题解:http://www.cnblogs.com/crazyapple/p/321810 ...

  8. usaco4.12Fence Rails(迭代加深)

    为了这题还去学了下迭代加深 回来还是不会写 只好参考各大神的代码及题解了 二分枚举最大可以切的块数 然后就是各种分析及优化 USACO题解里写了7个优化.. 问题分析 抽象一下就可以发现,算法的本质是 ...

  9. poj2286The Rotation Game(迭代加深dfs)

    链接 把迭代加深理解错了 自己写了半天也没写对 所谓迭代加深,就是在深度无上限的情况下,先预估一个深度(尽量小)进行搜索,如果没有找到解,再逐步放大深度搜索.这种方法虽然会导致重复的遍历 某些结点,但 ...

随机推荐

  1. luoguP2266 爱的距离

    题目:http://www.luogu.org/problem/show?pid=2266 题解:感觉题意不清,就去瞅题解了T_T 然后发现好水... 类似于MST,我们把边从小到大加进去就可以了. ...

  2. javascipt取整数四舍五入

    1.丢弃小数部分,保留整数部分 parseInt(5/2) 2.向上取整,有小数就整数部分加1 Math.ceil(5/2) 3,四舍五入. Math.round(5/2) 4,向下取整 Math.f ...

  3. unity3d 随机生成地形之随机山脉

    利用Fractal Noise生成地形,再加上山体shader,外加雪shader Noise生成结果 noise 生成主要参考这篇文章,就不再赘述 Value3D: Perlin2D: Fracta ...

  4. apply和call详解

    1.        apply和call的区别在哪里 2.        什么情况下用apply,什么情况下用call 3.        apply的其他巧妙用法(一般在什么情况下可以使用apply ...

  5. openStack 性能开测-2

  6. 普通Java程序员学习使用的6个JDK内建工具

    与你的问题不同,我认为软件工程主要是用来解决问题的.有些博客认为“每个小孩都应该学习编程”,“你认为学数学只是玩玩而已?如果你有看过我的HTML5调试器的话,你会发现我是一个程序员,但我做的工作远不止 ...

  7. XMPPFrameWork IOS 开发(六)聊天室

    原始地址:XMPPFrameWork IOS 开发(六)聊天室 聊天室 //初始化聊天室 XMPPJID *roomJID = [XMPPJID jidWithString:ROOM_JID]; xm ...

  8. 实现网页页面跳转的几种方法大全(meta标签、js实现、php实现)

    1.meta标签实现 只需在head里加上下面这一句就行了,在当前页面停留0.1秒后跳转到目标页面  代码如下 复制代码 1 <meta http-equiv="refresh&quo ...

  9. winform 五子棋 判断输赢 分类: WinForm 2014-08-07 20:55 256人阅读 评论(0) 收藏

    新手上路,高手勿进! 利用数组,根据新旧数组值的不同,获取那个点是什么棋子: 说明: 棋盘:15*15; 定义4个全局变量: string[,] stroldlist = new string[15, ...

  10. js判断input输入框为空时遇到的问题 弹窗后,光标没有定位到输入框,而是直接执行我的处理页面程序

    无论是会员注册还是提交订单,我们都要使用到form表单,此时我们在处理数据时,就要判断用户填写的信息.一次是直接通过js判断input输入框是否没有填信息,然后在后台处理文件中通过过滤字符串后再次判断 ...