【筆記】分組
阿新 • • 發佈:2020-08-19
牛牛有一個n個數字的序列\(a_1,a_2,\dots,a_n\),現在牛牛想把這個序列分成k段連續段,牛牛想知道分出來的k個連續段的段內數字和的最小值最大可以是多少?
int solve(int n, int k, vector<int>& a) { int sum=0; for(int i=0;i<a.size();++i) { sum+=a[i]; } int l=0,r=sum; //最小時為0,最大為各個元素的和 while(l<r) { int mid=(l+r+1)/2; if(binsearch(k,a,mid)) { l=mid; } else { r=mid-1; } } return l; } bool binsearch(int k,vector<int>& a,int val) { int count=0; int sum=0; for(int i=0;i<a.size();++i) { sum+=a[i]; if(sum>=val) { sum=0; count++; } } return count>=k; }