第七章 分治演算法 1243 月度開銷

2021-10-04 21:50:59 字數 1252 閱讀 5609

1243:月度開銷

時間限制: 1000 ms 記憶體限制: 65536 kb

提交數: 5287 通過數: 1850

【題目描述】

農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來 n (1 ≤ n ≤ 100,000) 天裡每天需要的開銷。

約翰打算為連續的m (1 ≤ m ≤ n) 個財政週期建立預算案,他把乙個財政週期命名為fajo月。每個fajo月包含一天或連續的多天,每天被恰好包含在乙個fajo月裡。

約翰的目標是合理安排每個fajo月包含的天數,使得開銷最多的fajo月的開銷盡可能少。

【輸入】

第一行包含兩個整數n,m,用單個空格隔開。

接下來n行,每行包含乙個1到10000之間的整數,按順序給出接下來n天裡每天的開銷。

【輸出】

乙個整數,即最大月度開銷的最小值。

【輸入樣例】

7 5100

400300

100500

101400

【輸出樣例】

500【提示】

若約翰將前兩天作為乙個月,第

三、四兩天作為乙個月,最後三天作為乙個月,則最大月度開銷為500。其他任何分配方案都會比這個值更大。

思路:分治用二分來做。

#include

#include

#include

using

namespace std;

int n,m,a[

100009

], maxx =

0, tot,ans;

bool

check

(int);

intmain()

int l = maxx, r = tot, mid;

while

(l <= r)

else

l = mid +1;

//否則擴大範圍

}printf

("%d"

,ans);}

bool

check

(int x)

else

sum +

= a[i];}

if(month <= m)

return1;

//月份等於m時正好分成m個月份,小於m時,可以將某些月份中的天數拆開組成新月份,滿足分成m個月份

else

return0;

}

1243月度開銷

農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來 n 1 n 100,000 天裡每天需要的開銷。約翰打算為連續的m 1 m n 個財政週期建立預算案,他把乙個財政週期命名為fajo月。每個fajo月包含一天或連續的多天,每天被恰好包含在乙個faj...

演算法答疑 06 月度開銷

演算法 二分加貪心 從0 組的每個數的和最大值 遍歷。判斷組是否滿足,組數 明值取大了,組數大了說明值取小了。13 for int i 1 i n i 14總時間限制 1000ms 記憶體限制 65536kb 描述農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並...

程式設計與演算法(二)月度開銷

題目 農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來 n 1 n 100,000 天裡每天需要的開銷。約翰打算為連續的m 1 m n 個財政週期建立預算案,他把乙個財政週期命名為fajo月。每個fajo月包含一天或連續的多天,每天被恰好包含在乙個...