#1112. [CSP2022 入门级] 第 25 题
[CSP2022 入门级] 第 25 题
(2)
#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);
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均是不超过 的正整数,完成下面的判断题和单选题:
判断题
算法 最为准确的时间复杂度分析结果为( )。
{{ select(1) }}