前段時間,某省發生乾旱,b山區的居民缺乏生活用水,現在需要從a城市修一條通往b山區的路。假設有a城市通往b山區的路由m條連續的路段組成, 現在將這m條路段承包給n個工程隊(n ≤ m ≤ 300)。為了修路的便利,每個工程隊只能分配到連續的若干條路段(當然也可能只分配到一條路段或未分配到路段)。 假設每個工程隊修路的效率一樣,即每修長度為1的路段所需的時間為1。現在給出路段的數量m,工程隊的數量n, 以及m條路段的長度(這m條路段的長度是按照從a城市往b山區的方向依次給出,每條路段的長度均小於1000), 需要你計算出修完整條路所需的最短的時間(即耗時最長的工程隊所用的時間)。
input
第一行是測試樣例的個數t ,接下來是t個測試樣例,每個測試樣例佔2行, 第一行是路段的數量m和工程隊的數量n,第二行是m條路段的長度。
output
對於每個測試樣例,輸出修完整條路所需的最短的時間。
sample input
2sample output4 3100 200 300 400
9 4250 100 150 400 550 200 50 700 300
400思路:二分,可能的最短時間是最長的那一段路,可能的最長時間是所有段路的總和。二分看在當前mid值下,需要的施工隊數量。900
#include#include#include#include#include#include#define eps 1e-12
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int a[305];
int main()
int l=max,r=sum;
while(l<=r)
}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...
F 修路 CSU 1023 二分
前段時間,某省發生乾旱,b山區的居民缺乏生活用水,現在需要從 a城市修一條通往 b山區的路。假設有 a城市通往 b山區的路由 m條連續的路段組成,現在將這 m條路段承包給 n個工程隊 n m 300 為了修路的便利,每個工程隊只能分配到連續的若干條路段 當然也可能只分配到一條路段或未分配到路段 假設...
zzuli 1919 二分 最大值最小化
description 晴天想把乙個包含n個整數的序列a分成連續的若干段,且和最大的一段的值最小,但他有強迫症,分的段數不能超過m段,然後他就不會分了。他想問你這個分出來的和最大的一段的和最小值是多少?input 第一行輸入乙個整數t,代表有t組測試資料。每組資料第一行為兩個整數n,m分別代表序列的...