農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來n(1 ≤n≤ 100,000) 天裡每天需要的開銷。
約翰打算為連續的m(1 ≤m≤n) 個財政週期建立預算案,他把乙個財政週期命名為fajo月。每個fajo月包含一天或連續的多天,每天被恰好包含在乙個fajo月裡。
約翰的目標是合理安排每個fajo月包含的天數,使得開銷最多的fajo月的開銷盡可能少。
第一行包含兩個整數n,m,用單個空格隔開。
接下來n行,每行包含乙個1到10000之間的整數,按順序給出接下來n天裡每天的開銷。
乙個整數,即最大月度開銷的最小值。
7 5
100400
300100
500101
400
500
中等,二分
月度開銷的值應該在 每天開銷最大值 和 每天開銷的總和 之間,通過二分法不斷逼近。judge函式判斷按照mid開銷所分的週期,如果週期大於給定週期m,則可以增加開銷,反之,減小開銷。
def
judge
(mid,l,n,m)
: summary =
0 t =
0for i in
range
(n):
if(summary+l[i]
>mid)
:#如果前幾個月加上這個月的錢大於這次嘗試的fajo月開銷,那麼說明這個月的錢應該放在下個fajo月裡
summary = l[i]
t +=
1else
: summary += l[i]
#繼續增加開銷
if(t>m)
:return
true
#減小開銷
else
:return
false
x =input()
.split(
)n =
(int
)(x[0]
)m =
(int
)(x[1]
)max =
0 total =
0a =
for i in
range
(n):
temp =
(int)(
input()
) total += temp #記錄開銷的總和
if(max: max = temp #記錄開銷的最大值
l = max
r = total
while
(l<=r)
: mid =
(int)(
(l+r)/2
)if(judge(mid,a,n,m)):
l = mid+
1else
: r = mid-
1print
(mid)
月度開銷(二分)
描述農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來 n 1 n 100,000 天裡每天需要的開銷。約翰打算為連續的m 1 m n 個財政週期建立預算案,他把乙個財政週期命名為fajo月。每個fajo月包含一天或連續的多天,每天被恰好包含在乙個f...
openjudge 月度開銷 二分查詢
06 月度開銷 總時間限制 1000ms 記憶體限制 65536kb 描述 農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來 n 1 n 100,000 天裡每天需要的開銷。約翰打算為連續的m 1 m n 個財政週期建立預算案,他把乙個財政週期命名...
二分,月度開銷
009 月度開銷 總時間限制 1000ms 記憶體限制 65536kb 描述農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來 n 1 n 100,000 天裡每天需要的開銷。約翰打算為連續的m 1 m n 個財政週期建立預算案,他把乙個財政週期命名...