码迷,mamicode.com
首页 > 其他好文 > 详细

BNUOJ 34978 汉诺塔 (概率dp)

时间:2019-03-29 21:04:57      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:return   release   color   题目   ret   article   csdn   ase   content   

题目分析:对于 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)

标签:return   release   color   题目   ret   article   csdn   ase   content   

原文地址:https://www.cnblogs.com/ldxsuanfa/p/10623673.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
分享档案
周排行
mamicode.com排行更多图片
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!