Python编程题1--九九乘法表

时间:2020-08-08 17:44:07   收藏:0   阅读:101

题目来源:算法竞赛进阶指南

题目标签:递归,动态规划

题目链接: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;
}

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!