演算法思路:首先求最大值最小或最小值最大問題應用二分來直接二分出答案,其次寫出check函式判斷,由題意可得,答案的範圍一定在數列的最大值至數列所有項的和之間,於是我們可令l = 數列中最大值, r = 數列所有項的和,而check函式應判斷我們二分到的答案最少能分為幾段,如果段數大於m則答案在mid右側,否則答案在mid左側。
ac**
#include
#include
using
namespace std;
const
int n =
100010
;int a[n]
, s[n]
, n, m;
intcheck
(int x)
return res;
}int
main
(void
) r = s[n]
;while
(l < r)
cout << l << endl;
return0;
}
P1182 數列分段Section II
二分答案 確定左邊界和右邊界後找中間值,驗證該值是不是不滿足 要找到滿足中最小的那個 不如說是找到不能滿足的最大的那個 1 主要是怎麼寫好judge函式。將數列在保證分段和不超過mid的情況下 盡可能使得段數最少 如果最少段數超過了m,說明滿足最大值最小的 ans 一定比該二分答案大,也就是說mid...
P1182 數列分段 Section II
對於給定的乙個長度為n的正整數數列a ia i,現要將其分成m m n m m n 段,並要求每段連續,且每段和的最大值最小。關於最大值最小 例如一數列4 2 4 5 142451要分成33段 將其如下分段 4 2 4 5 1 42 45 1 第一段和為66,第22段和為99,第33段和為11,和最...
P1182 數列分段 Section II
求最小值的最大,最大值的最小,考慮二分 對於給定的乙個長度為n的正整數數列a i,現要將其分成m m n 段,並要求每段連續,且每段和的最大值最小。輸入格式 第1行包含兩個正整數n,m。第2行包含nn個空格隔開的非負整數a,含義如題目所述。輸出格式 乙個正整數,即每段和最大值最小為多少。輸入樣例 1...