A62680 | 问题描述对于给定的一个长度为N的正整数数列A₁~Aₙ,现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小。例如,把以下长度为5的数列分成3段:4 2 4 5 1。一种分法是:[4 2][4 5][1],每段和分别为6、9、1,最大值为9;另一种分法可以是:[4 2][4][5 1],每段和分别为6、4、6,最大值为6。可以发现第二种方案是最大值最小的方案。#include<b…
来源2025年
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
问题描述
对于给定的一个长度为N的正整数数列A₁~Aₙ,现要将其分成M(M≤N)段,并要求每段连续,且每段和的最大值最小。
例如,把以下长度为5的数列分成3段:4 2 4 5 1。
一种分法是:[4 2][4 5][1],每段和分别为6、9、1,最大值为9;
另一种分法可以是:[4 2][4][5 1],每段和分别为6、4、6,最大值为6。
可以发现第二种方案是最大值最小的方案。
#include<bits/stdc++.h>
using namespace std;
int n, m, a[100005], ans;
bool check(int x){
int tot =0, num = ①;
for(int i=1; i<=n; i++){
if(②){
tot += a[i];
}else{
③;
num++;
}
}
return num > m;
}
int main(){
int l=0, r=0;
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++){
scanf("%d",&a[i]);
l =max(l, a[i]);
r += a[i];
}
while(④){
int mid = ⑤;
if(check(mid)) l = mid +1;
else r = mid;
}
cout << l;
return 0;
}暂无题解
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?