Poj P1958 Strange Towers of Hanoi___动态规划

题目大意:

问在 H a n o i 问题中,
解决 N 4 塔问题最少需要多少步。
N 1 12 ,依次回答。

分析:

考虑经典 H a n o i 问题,即 N 3 塔,
d [ i ] 表示 i 3 塔的最少步数,
显然有 d [ i ] = 2 d [ i 1 ] + 1 ,即将前 i 1 个盘从柱 A 移动到柱 B ,然后将第 i 个盘移动到塔 C ,最后将前 i 1 个盘移动到塔 C
那么求解 N 4 塔问题,就是可以由 N 3 塔得到,
f [ i ] 表示 i 4 塔的最少步数,
则有 f [ i ] = m i n ( f [ i ] , 2 f [ j ] + d [ i j ] ) ,即将前 j 个盘子在 4 塔模式移动到 B ,然后在 3 塔模式下移动剩下的 i j 个盘子到 D ,最后在前将 j 个盘子移动到 D

代码:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define N 20

using namespace std;

int h3[N], h4[N];

int main()  
{   
    h3[1] = 1;
    for (int i = 2; i <= 12; i++) h3[i] = h3[i-1]*2 + 1;

    memset(h4, 0x3f, sizeof(h4));
    h4[1] = 1;
    for (int i = 2; i <= 12; i++)
         for (int j = 1; j < i; j++) h4[i] = min(h4[i], h4[j]*2 + h3[i-j]); 

    for (int i = 1; i <= 12; i++) printf("%d\n", h4[i]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/gx_man_vip/article/details/81303879