草稿,自用
2026-10-16 15:47:55
发布于:广东
有 n 个数,无序,分成最多 m 段,最小化所有段中"段和的最大值"
m<=n<=10^6
#include <bits/stdc++.h>
using namespace std;
int main() {
int n,m,k_duan=0,duan1;
scanf("%d%d", &n, &m);
int a[1000005],s[1000005];
int mx = 0;
cin >> a[1];
s[1] = a[1];
for (int i = 2; i <= n; i++) {
cin >> a[i];//a[i]存n个数
s[i] = s[i - 1] + a[i];//前缀和s
mx = max(mx, a[i]);
}
//中间循环处理,找出符合条件的k_duan<=m,k_duan符合条件时结束循环
for(;;){
if(k_duan<=m)break;//k_duan符合,结束循环去输出结果
else {//k_duan不符合,说明段数太多超过m,
1
}
}
//输出结果,最大的区间和
return 0;
}
这里空空如也












有帮助,赞一个