Monthly Expense POJ - 3273 (二分)
阿新 • • 發佈:2018-10-31
題意:給出農夫在n天中每天的花費,要求把這n天分作m組,每組的天數必然是連續的,要求分得各組的花費之和應該儘可能地小,最後輸出各組花費之和中的最大值。
題解:二分答案即可
附上程式碼:
#include<iostream> #include<cstdio> using namespace std; const int maxn=1e5+50; int n,m,money[maxn]; bool solve(int limit) { int group=1,sum=0; for(int i=1;i<=n;i++){ if(sum+money[i]<=limit){ sum+=money[i]; }else{ group++; sum=money[i]; } } if(group>m){ return false; }else{ return true; } } int main() { while(scanf("%d%d",&n,&m)!=EOF){ int lb=0,ub=0; for(int i=1;i<=n;i++){ scanf("%d",&money[i]); ub+=money[i]; if(lb<money[i]){ lb=money[i]; } } ub++;lb--; while(ub-lb>1){ int mid=(lb+ub)>>1; if(solve(mid)){ ub=mid; }else{ lb=mid; } } printf("%d\n",ub); } return 0; }