hdu 1207 dp加递归 经典递归 四根柱子
一看汉诺塔的次数,第一感觉是数学题,但一看答案是dp出乎意料,
对dp有了更加全面的理解,主要是递归的规划,从复杂的递归回归的
基础的递归
#include <stdio.h> #include <math.h> __int64 ans[65]; double _min,temp,f[65]; int main() { int i,j,n; f[0]=1; for(i=1;i<65;i++) f[i]=f[i-1]*2; ans[1]=1; for(i=2;i<65;i++) { _min=pow(2,64)-1; for(j=1;j<i;j++) { temp=2*ans[j]+f[i-j]-1;//这里枚举j,先将j个盘子采用最优策略移到D(多余的)的柱子上,再将剩下的移到C柱子
if(temp<_min)//上,即为3个柱子的汉诺塔模型(因为此时D柱子不可以用),再将j个盘子按照最优策略移到C
_min=temp; } ans[i]=_min; } while(scanf("%d",&n)!=EOF) { printf("%I64d\n",ans[n]); } return 0; }