#4341. CSP 2022 普及组级第一轮:阅读程序第二题

CSP 2022 普及组级第一轮:阅读程序第二题

#include <algorithm>
#include <iostream>
#include <limits>

using namespace std;

const int MAXN = 105;
const int MAXK = 105;

int h[MAXN][MAXK];

int f(int n, int m)
{
    if (m == 1) return n;
    if (n == 0) return 0;

    int ret = numeric_limits<int>::max();
    for (int i = 1; i <= n; i++)
        ret = min(ret, max(f(n - i, m), f(i - 1, m - 1)) + 1);//19
    return ret;
}

int g(int n, int m)
{
    for (int i = 1; i <= n; i++)
        h[i][1] = i;
    for (int j = 1; j <= m; j++)
        h[0][j] = 0;

    for (int i = 1; i <= n; i++){
        for (int j = 2; j <= m; j++){
            h[i][j] = numeric_limits<int>::max();
            for (int k = 1; k <= i; k++)
            h[i][j] = min(
                h[i][j],
                  max(h[i - k][j], h[k - 1][j - 1]) + 1);                    
        }
      }
    return h[n][m];
}

int main()
{
    int n, m;
    cin >> n >> m;
    cout << f(n, m) << endl << g(n, m) << endl;
    return 0;
}

假设输入的 n、m 均是不超过 100 的正整数,完成下面的判断题和单选题:

判断题和单选题:

判断题

1、当输入为"7 3"时,第19行用来取最小值的min函数执行了449次。( )

{{ select(1) }}

  • 正确
  • 错误

2、输出的两行整数总是相同的。( )

{{ select(2) }}

  • 正确
  • 错误

3、当m为1时,输出的第一行总为n。( )

{{ select(3) }}

  • 正确
  • 错误

单选题:

4、算法g(n,m)最为准确的时间复杂度分析结果为( )。

{{ select(4) }}

  • O(n^{3/2}m)
  • O(mn)
  • O(n^2m)
  • O(nm^2)

5、当输入为"20 2"时,输出的第一行为( )。

{{ select(5) }}

  • "4"
  • "5"
  • "6"
  • "28"

(4分)6、当输入为"100 100"时,输出的第一行为( )。

{{ select(6) }}

  • "6"
  • "7"
  • "8"
  • "9"