标签:
//动态规划,转移是g[n]=min{g[n-k]+g[n-k]+f[k]}(1<=k<n)其中f[n]是三个柱子时候的汉诺塔 //f[n]=f[n-1]+f[n-1]+1;----->f[n]=2^n-1; #include<stdio.h> #include<math.h> int main() { int n,i,k; double f[66],g[66]; f[1]=2.0; for(i=2;i<=64;i++)f[i]=f[i-1]*2.0; for(i=1;i<=64;i++)f[i]-=1.0; g[1]=1; for(i=2;i<=64;i++) { g[i]=g[i-1]*2+f[1]; for(k=2;k<i;k++) { double tmp=g[i-k]*2+f[k]; if(g[i]>tmp)g[i]=tmp; } } while(scanf("%d",&n)!=EOF) { printf("%.0lf\n",g[n]); } return 0; }
标签:
原文地址:http://www.cnblogs.com/zzzzw/p/4447001.html