n盘m塔 汉诺塔
int dp[maxn][maxn]; signed main() { /*n个盘 m座塔*/ int n,m; n=31,m=31; /*初始化动规边界*/ dp[2][1]=1;//初始化两座塔的情况 for(int i=3; i<=m; ++i) dp[i][1]=1;//初始化只有一个盘的情况 for(int i=2; i<=n; ++i) dp[3][i]=2*dp[3][i-1]+1;//初始化只有三座塔的情况 /*计算m塔问题,m>3 */ for(int i=4; i<=m; ++i){ for(int j=2; j<=n; ++j){ dp[i][j]=dp[i-1][j]; for(int k=1; k<j; ++k) dp[i][j]=min(2*dp[i][k]+dp[i-1][j-k],dp[i][j]); } } /*输出结果*/ for(int i=3;i<=m;++i){ for(int j=1;j<=n;++j) pfk(dp[i][j]); pfhh; } return 0; }