4135 月度開銷(二分查詢)

2022-05-10 07:37:56 字數 1571 閱讀 7083

總時間限制: 

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。其他任何分配方案都會比這個值更大。

我自己寫的**感覺沒有邏輯錯誤啊,總是wrong,大佬幫忙看看**的問題

1 #include 2

using

namespace

std;34

int n,m,a[100005];5

int fun(int

t) else sum=a[i];13}

14if(k<=m)return1;

15else

return0;

16}1718

intmain()

27int left=maxx,right=summ,mid;

28while(left<=right)

33 cout34return0;

35 }

下面貼乙個通過的**:

1 #include2 #include3

#define max 100010

4using

namespace

std;

5bool judge(int mid, int a, int n, intm)6

15else sum+=a[i]; //

否則就加上這個月 16}

17//

如果按照mid的分割方法,最大分割出t個月大於m,則可以繼續增加開銷,

18//

注意,這裡是說,最少分出的月份是t,那麼t>=m,則可以繼續增加開銷,以便使t變小

19if(t>=m) return

true

; 20

else

return

false;21

}22intmain()

2332

int l=max, r=total, mid;

33while(l<=r)

3439 cout40return0;

41 }

4135 月度開銷

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

4135 月度開銷

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

二分,月度開銷

009 月度開銷 總時間限制 1000ms 記憶體限制 65536kb 描述農夫約翰是乙個精明的會計師。他意識到自己可能沒有足夠的錢來維持農場的運轉了。他計算出並記錄下了接下來 n 1 n 100,000 天裡每天需要的開銷。約翰打算為連續的m 1 m n 個財政週期建立預算案,他把乙個財政週期命名...