zoukankan      html  css  js  c++  java
  • 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
    ",dp[n]);
        }
        return 0;
    }


查看全文
  • 相关阅读:
    51nod 1179 最大的最大公约数
    HDU 6090 Rikka with Graph —— 2017 Multi-University Training 5
    HDU 6073 Matching In Multiplication —— 2017 Multi-University Training 4
    HDU 6069 Counting Divisors —— 2017 Multi-University Training 4
    HDU 6058 Kanade's sum —— 2017 Multi-University Training 3
    HDU 6055 Regular polygon —— 2017 Multi-University Training 2
    HDU 6053 TrickGCD —— 2017 Multi-University Training 2
    ORA-01722:无效数字
    ORA-01427 单行子查询返回多个行
    ORA 00972 错误处理
  • 原文地址:https://www.cnblogs.com/ldxsuanfa/p/10623673.html
  • Copyright © 2011-2022 走看看