Uva10795 新汉诺塔问题(转化模型,经典题)
来源:互联网 发布:js调用windows命令 编辑:程序博客网 时间:2024/06/05 19:45
Problem
给定
Data constraint
Solution
非常有意思的题。
我们考虑一个结论:
给定起始状态,目标状态,设
那么答案就是
这样的结论,是因为结论:每一步可逆
那么,我们考虑先移动第
设
我们可以把
只需考虑第
那么设状态
显然,我们看看第
这样子,可以得知
如何推导
同理,与我们刚刚分析的一样,先判断第
否则,便是
表示先把
long long f(int *p, int i,int final){ if (i==0) return 0; if (p[i]==final) return f(p,i-1,final); else return f(p,i-1,6-p[i]-final) + (1LL << (i-1));}//注意这里的两个地方:// ①我们可以用 *p来替代一个数组,这是我从前所不寄到的东西// ②在1 << x处一定要写成1LL << x,否则会出现一些奇葩错误
#include <cstdio>#define fo(i,a,b) for(i=a;i<=b;i++)#define Maxn 100using namespace std;int st[Maxn], en[Maxn], i , n, other;long long f(int *p, int i,int final){ if (i==0) return 0; if (p[i]==final) return f(p,i-1,final); else return f(p,i-1,6-p[i]-final) + (1LL << (i-1));}int main(){ freopen("data.in","r",stdin); scanf("%d",&n); fo(i,1,n) scanf("%d",&st[i]); fo(i,1,n) scanf("%d",&en[i]); int k = n; while (k >= 1 && st[k]==en[k]) k--; long long ans = 0; if (k>=1){ other = 6 - st[k] - en[k]; ans = f(st,k-1,other) + f(en,k-1,other) + 1; } printf("%lld",ans);}
阅读全文
0 0
- Uva10795 新汉诺塔问题(转化模型,经典题)
- uva10795 - 新汉诺塔问题 (递归)
- uva10795 - A Different Task(新汉诺塔问题)
- 例题1.11 新汉诺塔问题 UVa10795
- uva10795(汉莫塔)
- uva10795
- uva10795
- UVa10795
- UVa10795
- 哈诺塔题型问题+uva10795+URAL 2029
- 背包问题经典模型
- SQL 面试经典问题 行列互相转化
- UVa 108 Maximum Sum (经典问题转化)
- #bzoj2375#餐巾计划问题(费用流建图经典模型)
- 模型转化
- uva10795-汉诺塔新问
- OI经典问题与基本模型
- 动态规划问题—经典模型
- 基于WebSocket的网页端即时通讯
- laravel databas
- (转)Android 使用极光/友盟推送,APP进程杀死后为什么收不到推送
- servlet session管理之一 重写
- as gradle和gradle插件的配置
- Uva10795 新汉诺塔问题(转化模型,经典题)
- php快速高效验证邮箱,长度限制
- Python编程笔记
- mybatis 里面使用<if test=""> 判断,当后台传的值是数字字符串时,怎么处理
- 云计算选择的三大必然因素
- SSL证书部署指南(https)
- php清除缓存
- ssm+mysql三级省市区级联
- pandas数据合并与重塑---join、merge方法