组合题

#include <iostream>

using namespace std;

const int maxn = 10000;

int n;

int a[maxn];

int b[maxn];

int f(int l, int r, int depth) {

    if (l > r)

        return 0;

    int min = maxn, mink;

    for (int i = l; i <= r; ++i) {

        if (min > a[i]) {

            min = a[i];

            mink = i;

        }

    }

    int lres = f(l, mink - 1, depth + 1);

    int rres = f(mink + 1, r, depth + 1);

    return lres + rres + depth * b[mink];

}

int main() {

    cin >> n;

    for (int i = 0; i < n; ++i)

        cin >> a[i];

    for (int i = 0; i < n; ++i)

        cin >> b[i];

    cout << f(0, n - 1, 1) << endl;

    return 0;

}

第1题 判断题

如果a数组有重复的数字,则程序运行时会发生错误。()

A 正确
B 错误
第2题 判断题

如果b数组全为0,则输出为0。()

A 正确
B 错误
第3题 单选题

当n=100时,最坏情况下,与第12行的比较运算执行的次数最接近的是:()。

A

5000

B

600

C

6

D

100

第4题 单选题

当n=100时,最好情况下,与第12行的比较运算执行的次数最接近的是:()。

A

100

B

6

C

5000

D

600

第5题 单选题

当n=10时,若b数组满足,对任意0<=i<n,都有b [i]=i + 1,那么输出最 大为()。

A

386

B

383

C

384

D

385

第6题 单选题

当n二100时,若b数组满足,对任意0 S i < 71,都有b [i]二1,那 么输出最小为()。

A

582

B

580

C

579

D

581

赣ICP备20007335号-2