不是VIP会员,不能显示答案

题目解答

题目:
#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 均是不超过 100 的正整数,完成下面的判断题和单选题:



判断题

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

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

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


选择题

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

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

6) (4 分)当输入为“100 100”时,输出的第一行为( )。
考点:
分析:
解答:
评论:
老师: