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

题目解答

题目:
#include <iostream>

using namespace std;



const int N = 1001;



int n, a[N];



int ans = 0;



void dfs(int L, int R) {

if(L > R)

return;

int p = L;

for(int i = L + 1; i <= R; i += 1)

if(a[i] < a[p])

p = i;

ans += (p - L + 1) * (R - p + 1) * a[p];

dfs(L, p - 1);

dfs(p + 1, R);

}



int main() {

int n;

cin >> n;

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

cin >> a[i];

dfs(1, n);

cout << ans << endl;

}


判断题

1) 如果输入n = 1000, 所有的a[i] = 100000,程序不会产生整形溢出。( )

2) 将第11行改为if(L >= R) 程序仍然可以计算出相同的结果。( )

3) 当n = 4, a = {1, 2, 4, 3}时,输出为20。( )


选择题

4) 该程序的最劣复杂度为( )。

5) 该程序在a为1,2,…,n的随机排列时,时间复杂度的期望为( )。
考点:
分析:
解答:
评论:
老师: