zoukankan      html  css  js  c++  java
  • hdoj1207-汉诺塔II(多柱汉诺塔问题)

    题目链接

    思路

    首先这是个多柱汉诺塔问题,对于n阶汉诺塔,具体步骤如下:
    1. 首先我们将x个盘子移到B柱,步数为step(x);
    2. 然后将n-x个盘子移到C柱,步数为2^(n-x)-1;
    3. 最后我们再将B柱上的x个盘子移到C柱,步数为step(x)。
    4. 上面的x在1到n之间取值,对于每一个X,我们可以求出一个step(n),然后我们取其中的最小值作为最优解;

    code

     1 #include <iostream>
     2 #include <cmath>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 double step[65];            //为防止溢出,使用double
     7 int main() {
     8     step[1] = 1;
     9     step[2] = 3;
    10     for(int i = 3; i < 65; i ++) {
    11         step[i] = 100000;
    12         for(int j = 1; j < i; j ++) {
    13             step[i] = min(step[i], (double)(2 * step[j] + pow(2, i - j) - 1)); 
    14         }
    15     }
    16     int n;
    17     while(cin >> n) {
    18         cout << step[n] << endl;
    19     }
    20     return 0;
    21 }
  • 相关阅读:
    单例模式 & Init(allocWithZone:)
    Go 初体验
    Go 初体验
    beego 初体验
    beego 初体验
    beego 初体验
    beego 初体验
    beego 初体验
    beego 初体验
    beego 初体验
  • 原文地址:https://www.cnblogs.com/topk/p/6580077.html
Copyright © 2011-2022 走看看