poj1958 Strange Towers of Hanoi

考虑递推。

d[i]表示在三塔的情况下 d[i]=d[i-1]*2+1

f[i]表示在四塔的情况下 f[i]=f[j]*2+d[i-j]  (1<=j<i)

#include<cstdio>
using namespace std;
inline int min(int a,int b){return a<b?a:b;}
const int N=15,inf=999999999;
int d[N],f[N];
int main(){
    d[1]=f[1]=1;
    for(int i=2;i<=12;++i)d[i]=d[i-1]*2+1;
    for(int i=2;i<=12;++i){
        f[i]=inf;
        for(int j=1;j<i;++j)f[i]=min(2*f[j]+d[i-j],f[i]);
    }
    for(int i=1;i<=12;++i)printf("%d\n",f[i]);
    return 0;
}
View Code

 

posted @ 2018-12-17 10:26  lqsno1  阅读(63)  评论(0编辑  收藏  举报