递归做法
查看原帖
递归做法
524191
Man_CCNU楼主2021/11/24 10:39
#include<iostream>

using namespace std;

const int N = 1e6 + 10;
int a[N], n, res;

void pro(int l, int r)
{
    if (l > r) return;
    int index = 0, min_ = 1e9;
    for (int i = l; i <= r; i++) {
        if (a[i] < min_) {
            min_ = a[i];
            index = i;
        }
    }
    if (a[index] == 0) return;
    res += min_;
    for (int i = l; i <= r; i++) a[i] -= min_;
    int ll = 0, rr = 0;
    for (int i = l; i <= r; i++) {
        while (a[i] == 0 && i <= r)i++;
        ll = i;
        while (a[i] != 0 && i <= r)i++;
        rr = i - 1;
        pro(ll, rr);
    }

    return;
}
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    pro(1, n);
    cout << res << endl;

    return 0;
}
2021/11/24 10:39
加载中...