POJ3273-Monthly Expense-二分答案
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ3273-Monthly Expense-二分答案相关的知识,希望对你有一定的参考价值。
FJ对以后的每一天会花mi块钱,他想把这些天分成M个时段,然后每个时段的花费和最小。
二分答案,如果加上这天还没有达到mid,就加上它。之后看分成的时段是否大于M
#include <cstdio> #include <algorithm> using namespace std; int n,m,money[100100]; int judge(int mid) { int group = 1,sum = 0; for(int i=0;i<n;i++) { if(sum+money[i] <= mid) { sum += money[i]; } else { group++; sum = money[i]; } } if(group > m) return false; else return true; } int main() { while(~scanf("%d%d",&n,&m)) { int low=0,high=0; for(int i=0;i<n;i++) { scanf("%d",&money[i]); high += money[i]; low = max(low,money[i]); } int mid = (low+high)/2; while(low < high) { if(!judge(mid)) low = mid+1; else high = mid-1; mid = (low+high)/2; } printf("%d\n",mid); } }
以上是关于POJ3273-Monthly Expense-二分答案的主要内容,如果未能解决你的问题,请参考以下文章