题解
2025-10-08 15:59:38
发布于:广东
1阅读
0回复
0点赞
表示合并前个数的代价
表示合并前到个数的代价
枚举1 ~ n求最小值就行了
#include <bits/stdc++.h>
#define ll long long
#define endl '\n'
#define pii pair<int, int>
using namespace std;
const int maxn = 2e5 + 5;
int n, k;
int a[maxn];
ll pre[maxn], suf[maxn];
int main() {
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
ll sum = 0;
for (int i = 1; i <= n; i++) {
pre[i] = pre[i - 1] + (sum + k - 1) / k;
sum += a[i];
}
sum = 0;
for (int i = n; i >= 1; i--) {
suf[i] = suf[i + 1] + (sum + k - 1) / k;
sum += a[i];
}
ll ans = 2e18;
for (int i = 1; i <= n; i++) {
ans = min(ans, suf[i] + pre[i]);
}
cout << ans << endl;
}
这里空空如也
有帮助,赞一个