UVA 10795
来源:互联网 发布:php redis缓存周期 编辑:程序博客网 时间:2024/06/07 04:00
题意:
汉诺塔问题。有n个盘子,放在3个盘子上,给你一个初始状态和一个结束状态,问你从初始状态转移到结束状态的最小步数。
思路:
抓住中间状态,两边往中间走。
#include <bits/stdc++.h>using namespace std;typedef long long LL;int s[105], f[105];LL solve(int pos[], int k, int target)//把前k-1个放到另一个柱子上所需的最少步数。{ if(k == 0) return 0; if(pos[k] == target) return solve(pos, k - 1, target); //如果不相同要把前k-1个放到中间一根柱子other上。那形成的局面就是solve(*,*,*), //然后再把第k个扔到target上,就是1,然后把other上的k-1歌扔到target柱子上就是2^(k - 1) - 1 return solve(pos, k - 1, 6 - pos[k] - target) + (1LL << (k - 1));}int main(){ int n, cas = 1; while(~scanf("%d", &n)) { if(n == 0) break; for(int i = 1; i <= n; i++) scanf("%d", &s[i]); for(int i = 1; i <= n; i++) scanf("%d", &f[i]); while(n >= 1 && s[n] == f[n]) n--; LL ans = 0; if(n >= 1) { int other = 6 - s[n] - f[n]; ans = solve(s, n - 1, other) + solve(f, n - 1, other) + 1; } printf("Case %d: %lld\n", cas++, ans); } return 0;}
阅读全文
0 0
- uva 10795
- uva 10795
- uva 10795
- UVA 10795
- uva 10795
- UVa 10795
- UVA 10795
- UVA 10795 <递归>
- UVA - 10795(新汉诺塔问题)
- uva 10795(汉诺塔)
- uva 10795 新汉诺塔问题
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- ajaxFileUpload 异步上传文件简单使用
- 身份证信息录入
- Okhttp post请求简单使用
- yum安装卸载软件常用命令
- 毕业设计从头再来第二番
- UVA 10795
- Android studio 利用gradle快速编译出apk
- navicat premium连接oracle
- java IO流之图片的加密与解密
- php语言开发第一章
- 菱形
- 查看、修改mysql的用户名和密码
- PCA: Principal Components Analysis,主成分分析法原理
- 错误 'ASP 0175 : 80004005'