c++每次选一个数将它分成两个数求最小操作次数使序列变成非递减序列

c++每次选一个数将它分成两个数求最小操作次数使序列变成非递减序列

img


你试试

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int n; 
    cin >> n;
    int a[n]; 
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    bool flag = true; 
    for (int i = 1; i < n; i++) {
        if (a[i] % 2 != a[0] % 2) {
            flag = false;
            break;
        }
    }
    if (!flag) { 
        cout << -1 << endl; 
        return 0;
    }
    sort(a, a + n); 
    int mid = a[n / 2]; 
    int ans = 0; 
    for (int i = 0; i < n; i++) {
        ans += abs(a[i] - mid); 
    }
    cout << ans << endl; 
    cout << mid << endl; 
    return 0;
}


【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^