• 新“愚公移山” 动态规划


    新“愚公移山”

    http://go.helloworldroom.com:50080/problem/2721

    题目描述

    为了吸引中小学生,参观博物院不再停留在看和听,核心理念转变成了互动。新“愚公 移山”项目,屏幕上出现 n 个石块,屏幕下方的底盘是二维方格,每个方格恰好能放置一个 石块。石块放置的规则是:底盘每一竖行方格组成一列,必须从最左边的一列开始摆放,每 列从最下面的方格开始连续摆放积木,底盘至少要放两列,后一列放的积木数至少比前一列 多一个。n 个石块共有多少种摆放方案呢? 下图为 5 个积木所能摆放的 2 种方案。

    avatar

    输入格式

    一行,包含一个正整数 n,表示生成的石块个数。

    输出格式

    一行,包含一个数,表示按规则摆放石头的方案总数。

    样例数据

    input

    5

    output

    2

    对于 40%的数据满足 n≤10; 对于 80%的数据满足 n≤100; 对于 100%的数据满足 n≤200;

    思路

    解法

    #include <bits/stdc++.h>
    #include <vector>
    #include <algorithm>
    #include <deque>
    #include <queue>
    #include <string>
    #include <set>
    using namespace std;
    
    int N;
    int f[202][202] = {{0}};
    
    int main() {
        cin >> N;
    
        // n rocks are in one column
        for (int n = 1; n <= N; n++) {
            f[n][1] = 1;
        }
    
        // 1 rock is with any number of columns
        for (int m = 2; m <= N; m++) {
            f[1][m] = 0;
        }
    
        // column is increasing
        for (int m = 2; m <= N; m++) {
            for (int n = 2; n <= N; n++) {
                f[n][m] = 0;
    
    
                int a1_max = n / m;
                for (int k = 1; k <= a1_max; k++) {
                    int left_n = n - m * k;
                    f[n][m] += f[left_n][m - 1];
                }
            }
        }
    
    //    cout << endl;
    //    cout << "----------------------------";
    //    for (int n = 1; n <= N; n++) {
    //        for (int m = 1; m <= N; m++) {
    //            cout << f[n][m] << " ";
    //        }
    //        cout << endl;
    //    }
    //    cout << endl;
    
        int count = 0;
        for (int m = 2; m <= N; m++) {
    //        cout << "m == " << m << " " << f[N][m] << endl;
            count += f[N][m];
        }
    
        cout << count << endl;
    }
  • 相关阅读:
    看雪-课程-加密与解密基础
    Windows API-Wininet&WinHTTP
    OS-Windows-bat-不等待当前命令返回继续执行后续指令
    Code-OPC DA- OPC Client Code Demo
    OS-Windows-Close Windows Error Reporting
    C-长度修饰符
    Code-Linux-time_t
    Windows-bat-Path
    Code-C++-CTime&ColeDateTime
    c++命名规范、代码规范和参数设置
  • 原文地址:https://www.cnblogs.com/lightsong/p/16305290.html
Copyright © 2020-2023  润新知