BNUOJ 34978 汉诺塔 (概率dp)
题目分析:对于 i 个盘 , 须要移动多少步,取决于最大的盘子在哪个杆上。在C杆上,则最大的盘不须要移动,由于初始状态一定是满足盘由下到上盘子依次变小的,仅仅须要移动i - 1个盘。假设在A杆上,则首先须要将最大盘移到C杆上。在此之前当然须要将其它i - 1个盘都移到B上,然后,将最大的盘移动到C上。然后移动i - 1个在B上的盘。假设最大的盘在B杆上,则相似于在A杆上的情况。
假设x个盘都在1个杆上 , 要移动到另外一个杆上,须要pow(2 。 x) - 1步。
设dp[ i ] 为要移动 i 个盘子的期望步数。显然 dp[ 1 ] = 2/3 = 1/3 * 0 + 1/3 * 1 + 1/3 * 1;
由上面的分析可知。dp[ i ] = 1/3 * dp[ i - 1] + 1/3 * (dp[ i - 1] + 1 + pow(2 , i - 1) - 1) + 1/3 * (dp[ i - 1] + 1 + pow(2 , i - 1) - 1)
= 1/3 * dp[ i - 1] +2/3 * (dp[ i - 1] + pow(2 , i - 1)
)
AC_CODE
const int Max_N = 32;
double dp[Max_N];
int main()
{
int t , n;
cin >> t;
while(t--){
cin >> n;
dp[1] = 2.0/3;
for(int i = 2; i <= n;i++){
dp[i] = 1.0/3 * dp[i -1] + 2.0/3 *(dp[i - 1] + pow(2.0 , i - 1));
}
printf("%.2lf\n",dp[n]);
}
return 0;
}
BNUOJ 34978 汉诺塔 (概率dp)的更多相关文章
- hdu 1207 汉诺塔II (DP+递推)
汉诺塔II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- BZOJ_1019_[SHOI2008]_汉诺塔_(DP)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1019 汉诺塔游戏,但是有移动优先级,在不违反原有规则的情况下,给定优先移动目标.求完成游戏所需 ...
- 【BZOJ 1019】 1019: [SHOI2008]汉诺塔 (DP?)
1019: [SHOI2008]汉诺塔 Description 汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成.一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一 ...
- 【ACwing 96】奇怪的汉诺塔——区间dp
(题面来自ACwing) 汉诺塔问题,条件如下: 1.这里有A.B.C和D四座塔. 2.这里有n个圆盘,n的数量是恒定的. 3.每个圆盘的尺寸都不相同. 4.所有的圆盘在开始时都堆叠在塔A上,且圆盘尺 ...
- 2020牛客寒假算法基础集训营6 C 汉诺塔 (dp 最长下降子序列)
https://ac.nowcoder.com/acm/contest/3007/C 将木板按照Xi从小到大排序,将这时的Yi数列记为Zi数列,则问题变成将Zi划分为尽可能少的若干组上升子序列. 根据 ...
- BZOJ 1019: [SHOI2008]汉诺塔( dp )
dp(x, y)表示第x根柱子上y个盘子移开后到哪根柱子以及花费步数..然后根据汉诺塔原理去转移... ------------------------------------------------ ...
- $bzoj1019-SHOI2008$ 汉诺塔 $dp$
题面描述 汉诺塔由三根柱子(分别用\(A\ B\ C\)表示)和\(n\)个大小互不相同的空心盘子组成.一开始\(n\)个盘子都摞在柱子\(A\)上,大的在下面,小的在上面,形成了一个塔状的锥形体. ...
- 汉诺塔(思维、DP思想)
链接:https://ac.nowcoder.com/acm/contest/3007/C来源:牛客网 题目描述 现在你有 N 块矩形木板,第 i 块木板的尺寸是 Xi*Yi,你想用这些木板来玩汉诺塔 ...
- UVA 10254 - The Priest Mathematician (dp | 汉诺塔 | 找规律 | 大数)
本文出自 http://blog.csdn.net/shuangde800 题目点击打开链接 题意: 汉诺塔游戏请看 百度百科 正常的汉诺塔游戏是只有3个柱子,并且如果有n个圆盘,至少需要2^n- ...
随机推荐
- unity3d各平台通讯原生的平台API的说明
注意:unity3d与原生代码的调用需要pro版本,此点注意了. 一.IOS平台,由于IOS平台的原生应该是objectC,所以通讯起来非常的简单, 1.原生代码调用u3d代码: 1.1.在Xcode ...
- andriod多线程
用ThreadHandle可以实现多线程,然后再主线程更新UI 第二种就是用 AsyncTask 具体看代码 public void onClick(View v) { new DownloadIma ...
- CodeForces 380.C Sereja and Brackets
题意 一串括号序列,只由(和)组成,然后是m个提问,提问l和r区间内,最大的匹配匹配括号数. 思路 第一,贪心的思想,用最正常的方式去尽量匹配,详细点说就是,先找到所有的(),然后删除这些(),再找所 ...
- 缓存区溢出检测工具BED
缓存区溢出检测工具BED 缓存区溢出(Buffer Overflow)是一类常见的漏洞,广泛存在于各种操作系统和软件中.利用缓存区溢出漏洞进行攻击,会导致程序运行失败.系统崩溃.渗透测试人员利用这 ...
- luogu P1310 表达式的值
题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. “× ”运算优先于“⊕”运算,即计算表达式时,先计算× 运算,再计算⊕运算.例如:计算表达式A⊕B × ...
- C# SQL帮助类
C# SQL帮助类 本人自己封装的SQLHelper类,执行sql server与Oracle数据的增删改查 vs自带的Oracle数据库引用需要安装Oracle客户端,如不想安装Oracle客户端, ...
- 谈谈 ServletConfig 和 ServletContext
目录 一.ServletConfig 和 ServletContext 的概念 二.ServletConfig 和 SerlvetContext 代码表示 一.ServletConfig 和 Serv ...
- java 字符串压缩长度并解压
package com.wy.data.emaildata.util; import org.apache.commons.io.FileUtils; import java.io.ByteArray ...
- DozerBeanMapper + 对象转Map方法
1.简介 dozer是一种JavaBean的映射工具,类似于apache的BeanUtils.但是dozer更强大,它可以灵活的处理复杂类型之间的映射.不但可以进行简单的属性映射.复杂的类型映 ...
- Boost.Asio c++ 网络编程翻译(18)
同步服务端 同步服务端也相当简单.它须要两个线程,一个负责接收新的client.另外一个负责处理已经存在的client. 它不能使用单线程:等带一个新的client是一个堵塞操作,所以我们须要另外一个 ...