标签:pytho int 字符 mat 代码 orm end 使用 打印
题目来源:算法竞赛进阶指南
题目标签:递归,动态规划
题目链接:https://www.acwing.com/problem/content/98/
思路:1.先用动态规划考虑三塔问题,状态转移方程为:d[ i ]=d[i - 1] * 2 + 1
(当前圆盘等于把当前圆盘上面的圆盘先移动到第二个塔,最后一个圆盘移动到第三个塔,上面的圆盘移动到第三个塔)
2.从三塔扩展到四塔:把当前塔上面的 j 个塔移动到某一个塔上(四塔问题), 把当前剩余的移动到最后一个塔上(三塔问题), 将前面 j 个塔移动到最后一个塔上(四塔问题)
状态转移方程:f[ i ]=min( f[ i ], f[ j ] * 2 + d[ n - j ])
代码:
#include <bits/stdc++.h> using namespace std; int main() { int d[15], f[15]; d[1] = 1; for(int i = 2; i <= 12; i++) { d[i] = 1 + d[i - 1] * 2; } memset(f, 0x3f, sizeof f); f[0] = 0; for(int i = 1; i <= 12; i++) for(int j = 0; j < i; j++) f[i] = min(f[i], f[j] * 2 + d[i - j]); for(int i = 1; i <= 12; i++) cout << f[i] << endl; return 0; }
标签:pytho int 字符 mat 代码 orm end 使用 打印
原文地址:https://www.cnblogs.com/wintest/p/13458210.html