當(dāng)前位置:
首頁(yè) >
【二分】数列分段(ybtoj 二分-1-1)
發(fā)布時(shí)間:2023/12/3
33
豆豆
默认站点
收集整理的這篇文章主要介紹了
【二分】数列分段(ybtoj 二分-1-1)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
數(shù)列分段
ybtoj 二分-1-1
題目大意
給出一個(gè)序列A,讓你把它分成m段,使每段和最大值最小
輸入樣例
5 3 4 2 4 5 1輸出樣例
6數(shù)據(jù)范圍
1?M?N?1051\leqslant M\leqslant N\leqslant 10^51?M?N?105
sum{Ai}?109sum\begin{Bmatrix}A_i\end{Bmatrix}\leqslant 10^9sum{Ai??}?109
解題思路
二分枚舉答案
然后O(n)O(n)O(n)判斷
代碼
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define ll long long using namespace std; ll n, m, l, r, mid, a[100010]; bool check(ll x)//判斷 {ll g = 0, gg = 1;for (int i = 1; i <= n; ++i)if (g + a[i] <= x) g += a[i];else g = a[i], gg++;//新的一段return gg <= m; } int main() {scanf("%lld%lld", &n, &m);for (int i = 1; i <= n; ++i){scanf("%lld", &a[i]);l = max(l, a[i]);r += a[i];} while(l < r)//二分{mid = (l + r)>>1;if (check(mid)) r = mid;else l = mid + 1;}printf("%lld", l);return 0; }總結(jié)
以上是默认站点為你收集整理的【二分】数列分段(ybtoj 二分-1-1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 怎样把照片拼在一起 把照片拼在一起方法介
- 下一篇: 【二分】防具布置/秦腾与教学评估(ybt