果園裡有n顆果樹,每棵果樹都有乙個編號i(1≤i≤n)。小明已經把每棵果樹上的果子都摘下來堆在了這棵樹的下方,每棵樹下方的果子體積為ai。
現在小明將拿來m個袋子把這些果子都裝進袋子裡。每個袋子的體積為v。小明會按照如下規則把果子裝進袋子裡:
(a)從第1棵果樹開始裝起,由1到n一直裝到第n棵果樹。
(b)如果這棵果樹下的果子能全部裝進當前這個袋子,就裝進去;如果不能,就關上當前這個袋子,開啟乙個新的袋子開始裝。
小明希望在能把所有果子都裝進袋子裡的前提下,v盡量小。m個袋子並不一定都要裝進果子。
輸入檔名為fruit.in
輸入第1行,包含兩個整數n和m。
第2行,包含n個整數ai。
輸出檔名為fruit.out
輸出僅1行,表示最小的v。
fruit.in
3 3
1 2 3
fruit.out
3
fruit.in
5 3
1 3 6 1 7
fruit.out
7
fruit.in
6 3
1 2 1 3 1 4
fruit.out
4
【輸入輸出樣例解釋1】每個袋子的體積為3即可。前2棵果樹的果子裝在第乙個袋子裡,第3棵果樹的果子裝在第二個袋子裡。第三個袋子不用裝了。【輸入輸出樣例解釋2】每個袋子的體積為7即可。前2棵果樹的果子裝在第乙個袋子裡,此時第乙個袋子已經裝了4單位體積的果子,第3棵果樹的果子裝不下了,所以裝進第二個袋子裡,第4棵果樹的果子剛好裝進第二個袋子,第5棵果樹的果子裝進第三個袋子裡。【輸入輸出樣例解釋3】每個袋子的體積為4即可。前3棵果樹的果子裝在第乙個袋子裡,第4~5棵果樹的果子裝在第二個袋子裡,第6棵果樹的果子裝在第三個袋子裡。
【資料範圍】
對於40%的資料,0對於70%的資料,0對於100%的資料,0solution:
這道題是一套題中的第一題,比較簡單。非常明顯是一道二分答案的題。如果v1滿足要求,任意v2>v1一定也滿足,存在v2
#include#include#include#include#include#includeusing namespace std;
int n,m,num;
long long a[200000],l,r,mid,now;
int main()
while(l>1;
now=0;
num=1;
for(int i=1;i<=n;i++)
if(now+a[i]<=mid)
now+=a[i];
else
if(num<=m)
r=mid;
else
l=mid+1;
} printf("%lld\n",r);
return 0;
}
二分查詢與二分答案
主要用於在乙個單調的函式中查詢某值 連續函式的情況 若當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y 則 l mid,否則 r mid 直至 r l eps 當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y...
二分查詢和二分答案
1.解釋 優點 查詢速度快。缺點 待查表為有序表。4.時間複雜度 o log n 5.示例 p2249查詢 include include using namespace std long long n,m,a 1000005 b 100005 l,r,mid,cnt,x intmain for i...
二分與二分答案學習
判斷left,mid,right的符號進行區間的精確。如下為遞迴二分求零點的操作 double find zero point double left,double right,double precesion double mid right left 2 if f mid 0 if f mid ...