• Strange Towers of Hanoi POJ


    题意:就是让你求出4个塔的汉诺塔的最小移动步数,(1 <= n <= 12)

    那么我们知道3个塔的汉诺塔问题的解为:d[n] = 2*d[n-1] + 1 ,可以解释为把n-1个圆盘移动到一个临时柱子上,然后将1个最大圆盘移动到目标的主子,最后再将n-1个圆盘移动到目标柱子。

    为什么是n-1和1的组合呢,因为当你将n-i个圆盘移动到一个临时柱子上的时候,你会发现只靠两个柱子最多能移动1个圆盘。所以这个i=1

    如果推到到4个柱子的汉诺塔,f[n] = min(f[n],2*f[n-i]+d[i]). (1 <= i < n),就是把n-i个圆盘移动到临时的一个柱子上,然后把剩下的 i 个圆盘在三个柱子中移动到目标柱子,最后把n-i移动会目标柱子

     1 #include<iostream>
     2 #include<string.h>
     3 #include<cstdio>
     4 using namespace std;
     5 
     6 int d[20];
     7 int f[20];
     8 int main()
     9 {
    10     d[1] = 1;
    11     for(int i=2;i<=12;i++)d[i] = (d[i-1]<<1)+1;
    12     memset(f,0x3f,sizeof(f));
    13     f[1] = 1;
    14     for(int i=2;i<=12;i++)
    15     {
    16         for(int j=1;j<i;j++)
    17         {
    18             f[i] = min(f[i],(f[j]<<1)+d[i-j]);
    19         }
    20     }
    21     for(int i=1;i<=12;i++)
    22     {
    23         printf("%d
    ",f[i]);
    24     }
    25 }
    View Code
  • 相关阅读:
    C#基础—string等类的有趣方法_1
    设计模式
    OOP-面向对象程序设计
    CSS3实用效果大全
    HTML5 DOM元素类名相关操作API classList简介(转载自张鑫旭大神)
    Js写的一个倒计时效果实例
    垂直居中的几种方案
    大图片加载优化解决方案
    DomReady实现策略
    脱离文档流
  • 原文地址:https://www.cnblogs.com/iwannabe/p/10099212.html
Copyright © 2020-2023  润新知