Description

一个汉诺塔,给出了移动的优先顺序,问从A移到按照规则移到另一个柱子上的最少步数.

规则:小的在大的上面,每次不能移动上一次移动的,选择可行的优先级最高的.

Sol

DP.

倒着DP.但是他有优先级,所以他的方案是唯一的.

状态 \(f[a][i]\) 表示 将 \(a\) 柱上的 \(i\) 个移到,能移动到的柱子上的步数.

他能移动到的柱子也是唯一的,这个可以跟DP一起递推出来.

\(g[a][j]\) 表示 将 \(a\) 柱上的 \(i\) 个能移动到的柱子.

然后就开始递推了,跟普通汉诺塔一样,把 \(i-1\) 个先移走,然后移动第 \(i\) 个盘子,显然他只能移动到 \(i-1\) 移动到的另一个柱子,然后考虑把 \(i-1\) 个一回来,这时候就有问题了.. \(i-1\) 个在优先级的影响下可能会回到原位置,这时候就不能把这些一共 \(i\) 个盘子移到 \(i\) 所在的柱子了,所以只能将 \(i\) 移到 \(i-1\) 一开始移动到的那个柱子.

结果就是 \(f[1][n]\) .

时间复杂度 \(O(n)\)

Code

/**************************************************************
Problem: 1019
User: BeiYu
Language: C++
Result: Accepted
Time:0 ms
Memory:1288 kb
****************************************************************/ #include<cstdio>
#include<iostream>
using namespace std; #define debug(a) cout<<#a<<"="<<a<<" "
const int N = 35; int n,b[3];
int g[3][N];
long long f[3][N]; int main(){
scanf("%d",&n);
for(int i=1;i<=6;i++){
char fr=getchar();while(fr>'Z' || fr<'A') fr=getchar();
char to=getchar();while(to>'Z' || to<'A') to=getchar();
if(!b[fr-'A']) b[fr-'A']=1,g[fr-'A'][1]=to-'A',f[fr-'A'][1]=1;
}
for(int i=2;i<=n;i++){
for(int a=0,b,c;a<3;a++){
b=g[a][i-1],c=3-a-b;
if(g[b][i-1] == c) f[a][i]=f[a][i-1]+1+f[b][i-1],g[a][i]=c;
if(g[b][i-1] == a) f[a][i]=f[a][i-1]+1+f[b][i-1]+1+f[a][i-1],g[a][i]=b;
}
}cout<<f[0][n]<<endl;
return 0;
}

  

BZOJ 1019: [SHOI2008]汉诺塔的更多相关文章

  1. BZOJ 1019: [SHOI2008]汉诺塔( dp )

    dp(x, y)表示第x根柱子上y个盘子移开后到哪根柱子以及花费步数..然后根据汉诺塔原理去转移... ------------------------------------------------ ...

  2. BZOJ 1019 :[SHOI2008]汉诺塔(递推)

    好吧蒟蒻还是看题解的 其实看到汉诺塔就该想到是递推了 设f[i][j]表示i个在j杆转移到另一个杆的次数 g[i][j]表示i个在j杆转移到那个杆上 可得 f[i][j]=f[i-1][j]+1+f[ ...

  3. 【BZOJ 1019】 1019: [SHOI2008]汉诺塔 (DP?)

    1019: [SHOI2008]汉诺塔 Description 汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成.一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一 ...

  4. 1019: [SHOI2008]汉诺塔

    1019: [SHOI2008]汉诺塔 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1495  Solved: 916[Submit][Status] ...

  5. 【BZOJ】1019: [SHOI2008]汉诺塔

    http://www.lydsy.com/JudgeOnline/problem.php?id=1019 题意:汉诺塔规则,只不过盘子n<=30,终点在B柱或C柱,每一次移动要遵守规则:1.小的 ...

  6. bzoj千题计划109:bzoj1019: [SHOI2008]汉诺塔

    http://www.lydsy.com/JudgeOnline/problem.php?id=1019 题目中问步骤数,没说最少 可以大胆猜测移动方案唯一 (真的是唯一但不会证) 设f[i][j] ...

  7. bzoj1019 [SHOI2008]汉诺塔

    1019: [SHOI2008]汉诺塔 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1030  Solved: 638[Submit][Status] ...

  8. 【bzoj1019】[SHOI2008]汉诺塔

    1019: [SHOI2008]汉诺塔 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 1427  Solved: 872[Submit][Status] ...

  9. bzoj1019: [SHOI2008]汉诺塔(动态规划)

    1019: [SHOI2008]汉诺塔 题目:传送门 简要题意: 和经典的汉诺塔问题区别不大,但是题目规定了一个移动时的优先级: 如果当前要从A柱子移动,但是A到C的优先级比A到B的优先级大的话,那就 ...

随机推荐

  1. 导出excel失败,提醒提示加载类型库/DDL出错

    导出excel失败,提醒提示加载类型库/DDL出错 www.MyException.Cn   发布于:2012-08-17 02:08:34   浏览:1538次   导出excel失败,提示提示加载 ...

  2. C++学习之Pair

    C++学习之Pair Pair类型概述 pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下: pair<int, string> a; 表示a中有两个类型, ...

  3. OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    这篇已经写得很好,真心给作者点个赞.题目都是直接转过来的,直接去看吧. Reference Link : http://blog.csdn.net/poem_qianmo/article/detail ...

  4. dom.style.left 与 dom.offsetLeft区别

    dom.style.left    初始空值,必须在html行内样式定义值才有值,在css样式定义仍为空值                         可读写,是字符串,读写是必须加px,否则无效 ...

  5. python sys os hashlib_MD5 模块

    模块 内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 一.sys 用于提供对Python解释器相关的操作: ? 1 2 3 4 5 6 7 8 9 sys.ar ...

  6. 用C语言将搜狗输入法词库转换成QQ拼音输入法词库

    搜狗输入法词库格式: 'ni'kan'xia 你看下 'ni'kan'xia'gai'hou 你看下改后 'ni'kan'xing'ma 你看行吗 'ni'kan'zen'me'yang 你看怎么样 ...

  7. 【10-25】OOP基础-飞机游戏知识点

    知识点 鼠标适配器类为抽象类,使用匿名子类实现鼠标事件的重写,创建一个鼠标适配器对象 添加鼠标事件监听器到JPanel对象实现鼠标的响应 创建定时器Timer对象,在定时器的任务列表方法schedul ...

  8. ASP.NET Web API与Owin OAuth:调用与用户相关的Web API(非第三方登录)

    授权完成添加属性 ClaimsIdentity oAuthIdentity = await CreateAsync(user/*userManager*/, OAuthDefaults.Authent ...

  9. Linux下,telnet命令如何退出

    测试连接本地的memcached telnet 链接后是这样的: wangkongming@Vostro ~ $ telnet Trying 127.0.0.1... Connected to 127 ...

  10. Apache ab参数--压力测试

    Apache附带的ab,它非常容易使用,ab可以直接在Web服务器本地发起测试请求.这至关重要,因为我们希望测试的服务器的处理时间,而不包含数据的网络传输时间以及用户PC本地的计算时间. 需要清楚的是 ...