F - Towers of Hanoi Strike Back-汉诺塔问题
来源:互联网 发布:赛鱼机源码 编辑:程序博客网 时间:2024/06/06 02:00
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=61980
题意:汉诺塔问题,给定一串只有(A, B, C)的字符串(A代表在第一根柱子,B代表在第二根柱子,C代表在第三根柱子),从前往后代表盘子的大小,第 i 个字母代表di i 个盘子在某个柱子上。问移动给定字母状态的盘子最少需要多少步。
建议先做一下 Pro.ID 1995 汉诺塔V
http://acm.hdu.edu.cn/showproblem.php?pid=1995
这个是普通的汉诺塔,最优的步数是2^n-1,只不过问的第i个盘子移动的次数。 做了这个就知道第i个盘子移动步数是2^(i-1)
因为一开始全部都在A 记state=A 从最后一个开始考虑 如果 最后一个目标是B 则 总步数+=2^(n-1) 然后state=C (做了上面那题就知道为什么了,可以去搜题解)
for一遍就把答案算出来了。。。好像没有坑
#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <queue>#include <algorithm>#include <iostream>using namespace std; int tm[55]; void change_all_state(int& all,int judge){if (all!=3&&judge!=3) all=3; elseif (all!=2&&judge!=2) all=2; elseif (all!=1&&judge!=1) all=1; } int main() { int n;cin>>n;getchar();int i;char cha;for (i=1;i<=n;i++){scanf("%c",&cha);tm[i]=cha-'A'+1;}int all=1;__int64 sum=0;for (i=n;i>=1;i--){if (tm[i]!=all){sum+=(__int64)pow(2.0,i-1);change_all_state(all,tm[i]);} }printf("%I64d\n",sum); return 0;}
0 0
- F - Towers of Hanoi Strike Back-汉诺塔问题
- URAL 2029 Towers of Hanoi Strike Back 汉诺塔,从初始状态到任意给出状态需要的次数
- 汉诺塔问题(Towers of Hanoi)
- 汉诺塔(Towers of Hanoi)问题
- The Towers of Hanoi recursion 汉诺塔 C++
- poj1920 Towers of Hanoi
- poj1958Strange Towers of Hanoi
- Acdream 1219 The Towers of Hanoi Revisited(递归汉诺塔问题)
- JOJ-2033-Towers of Hanoi
- poj 1920 Towers of Hanoi
- poj 1920 Towers of Hanoi
- UVa:254 Towers of Hanoi
- uva254 - Towers of Hanoi 递归
- POJ_1958_Strange Towers of Hanoi(四柱汉诺塔)
- POJ 1920 Towers of Hanoi
- POJ 1920 :Towers of Hanoi
- /* Non-recursive solution to Towers of Hanoi */
- POJ 1958 Strange Towers of Hanoi [dp]
- 机试算法讲解: 第33题 并查集之找小伙伴
- Python进阶之匿名函数
- 算法题:压缩任意字符串
- 链式栈 (实现进制转换)
- 数据库索引学习
- F - Towers of Hanoi Strike Back-汉诺塔问题
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 79 拦截导弹
- 转:java实现三个线程A B C,A线程打印A之后才能B线程打印B,然后接着C线程执行打印C,继而循环下去
- Python学习笔记-web开发
- Android Fragment 你应该知道的一切
- The Unique MST (POJ 1679)
- MFC修改文本框和字体颜色 加载图片
- 类似ios的picker的风格地址选择控件