zoukankan      html  css  js  c++  java
  • [POJ1958]Strange Towers of Hanoi

    分析

    汉诺四塔

    (f[i]) 表示求解 (i) 盘四塔的最少步数,设 (d[i]) 表示求解 (i) 盘三塔的最少步数:

    [d[i]=2cdot d[i-1]+1\ f[i]=min_{j=1}^{i-1}left{2cdot f[j]+d[i-j] ight} ]

    第二个递推式的含义是,将 (j) 盘在四塔模式下移动到一个中转柱,将剩余的 (n-j) 盘在三盘模式下移动到目标柱,再将那 (j) 个盘在四盘模式下移动到目标柱。

    代码

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,f[20],d[20];
    int D(int x){
        if(x==1)return 1;
    	if(d[x])return d[x];
    	return d[x]=D(x-1)*2+1;
    }
    int F(int x){
        if(x==1)return 1;
    	if(f[x])return f[x];
    	int res=0x3f3f3f3f;
    	for(int i=1;i<x;i++)res=min(res,F(i)*2+D(x-i));
    	return f[x]=res;
    }
    int main(){
        for(int i=1;i<=12;i++)printf("%d
    ",F(i));
    	return 0;
    }
    
  • 相关阅读:
    Spring的历史和哲学
    CORS简介
    LDAP概念了解
    Restful levels&HATEOAS
    python/mysql connector
    Session&Cookie 简介及使用
    XML简介
    Json简介
    《魅族官网》
    期末设计部分代码截图
  • 原文地址:https://www.cnblogs.com/sshwy/p/11026366.html
Copyright © 2011-2022 走看看