對於給定的乙個長度為n的正整數數列a−i,現要將其分成m(m≤n)段,並要求每段連續,且每段和的最大值最小。
關於最大值最小:
例如一數列42451要分成3段
將其如下分段:
[42][45][1]
第一段和為6,第2段和為9,第3段和為1,和最大值為9。
將其如下分段:
[4][24][51]
第一段和為4,第2段和為6,第3段和為6,和最大值為6。
並且無論如何分段,最大值不會小於6。
所以可以得到要將數列42451要分成3段,每段和的最大值最小為6。
輸入格式:
第1行包含兩個正整數n,m。
第2行包含n個空格隔開的非負整數ai,含義如題目所述。
輸出格式:
乙個正整數,即每段和最大值最小為多少。
輸入樣例#1:複製
5 3輸出樣例#1:複製4 2 4 5 1
6對於20%的資料,有n≤10;
對於40%的資料,有n≤1000;
對於100%的資料,有n≤100000,m≤n,ai之和不超過10^9。
以及這道題讓我知道,隨便取下限值是會wa的,比如你令l直接取0就會wa掉,雖然我也不知道為什麼。
#include#include#include#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
//最小化最大值問題
int a[100005];
int n,m;
int main()
if(cnt>m)
break;
}if(cnt<=m) //每段和太大了
r=mid-1;
else //不符合題意 修改下限(最小化問題)
l=mid+1;
}printf("%d\n",l);
return 0;
}
二分 最小化最大值
注意答案的二分性質,必須要滿足在滿足給定條件的所有情況的時候都滿足要求才能更新ans。include using namespace std typedef long long ll inline ll in while c 0 c 9 res res 10 c 48,c getchar retur...
zzuli 1919 二分 最大值最小化
description 晴天想把乙個包含n個整數的序列a分成連續的若干段,且和最大的一段的值最小,但他有強迫症,分的段數不能超過m段,然後他就不會分了。他想問你這個分出來的和最大的一段的和最小值是多少?input 第一行輸入乙個整數t,代表有t組測試資料。每組資料第一行為兩個整數n,m分別代表序列的...
POJ 3273(二分,最小化最大值)
和這道題一樣了 description 聰哥在暑假參加了打零工的活動,這個活動分為n個工作日,每個工作日的工資為vi。有m個結算工錢的時間,聰哥可以自由安排這些時間,也就是說什麼時候拿錢,老闆說的不算,聰哥才有發言權!因為聰哥是土豪,他是老闆的老闆 聰哥不喜歡身上一次性有太多的錢,於是他想安排一下拿...