难度:普及- 搜索题目请求帮忙~
查看原帖
难度:普及- 搜索题目请求帮忙~
405146
Ruan_ji楼主2022/6/12 10:54

这道题我用搜索解的,没过,求大佬帮助 测试点信息: 8个MLE 2个TLE

#include <iostream>
#include <cstdio>
#define MAXN 100005
using namespace std;
int n;
int number[MAXN];
int answer;
int function(int left, int right){
    // 1.取最小值
    // 2.以 0 为界,分解数组
    if ((right - left) == 0 and number[left] == 0){
        return 0;
    }
    int Min = 1e9; //存储最小值
    int q = 0; //存储最小值在数组中的位置
    for (int i = left;i <= right; ++i){
        if (number[i] <= Min){
            Min = number[i];
            q = i;
        }
    }
    
    answer += Min;
    for (int i = left;i <= right; ++i){
        number[i] -= Min;
    }
    function(left, q - 1);
    function(q + 1, right);
}
int main(){
    cin >> n;
    for (int i = 1;i <= n; ++i){
        cin >> number[i];
    }
    function(1, n);
    cout << answer << endl;
    return 0;
}
2022/6/12 10:54
加载中...