總時間限制: 1000ms 記憶體限制: 65536kb
描述
農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來 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
提示
若約翰將前兩天作為乙個月,第
三、四兩天作為乙個月,最後三天每天作為乙個月,則最大月度開銷為500。其他任何分配方案都會比這個值更大。
思想:題目中的「最大中的最小」是典型的二分查詢的問法,本題中「最大」是指money盡可能的大,使得按此money劃分的週期數小於或等於m;而「最小」就是在前述的money中不斷去縮小範圍,得到最終結果即可;對於週期數劃分可以按照使乙個週期的預算最接近給定money,因為劃分的cnt在小於m的情況下是可以從已有週期中拿出一些日期來單獨成週期且是滿足條件的,下面是**。
#include
using
namespace std;
intcheck
(int money,
int* ar,
int n)
sum +
= ar[i];}
return cnt;
}int
solve
(int max,
int min,
int* ar,
int m,
int n)
else
l = mid +1;
//money過小,擴大
}return fajo;
}int
main()
cout <<
solve
(max, min, ar, m, n)
;delete
ar;
return0;
}
openjudge8209 月度開銷
時空限制 1000ms 64mb 農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來 n 1 n 100,000 天裡每天需要的開銷。約翰打算為連續的m 1 m n 個財政週期建立預算案,他把乙個財政週期命名為fajo月。每個fajo月包含一天或連續...
Open judge 06月度開銷
06 月度開銷 總時間限制 1000ms 記憶體限制 65536kb 傳送門描述 農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來 n 1 n 100,000 天裡每天需要的開銷。約翰打算為連續的m 1 m n 個財政週期建立預算案,他把乙個財政週...
4135 月度開銷
題目 描述農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來 n 1 n 100,000 天裡每天需要的開銷。約翰打算為連續的m 1 m n 個財政週期建立預算案,他把乙個財政週期命名為fajo月。每個fajo月包含一天或連續的多天,每天被恰好包含在...