Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 22175 | Accepted: 8681 |
Description
Farmer John is an astounding(令人震惊的) accounting wizard(男巫) and has realized he might run out of money to run the farm. He has already calculated(计算) and recorded the exact amount(数量) of money (1 ≤ moneyi ≤ 10,000) that he will need to spend each day over the next N (1 ≤ N ≤ 100,000) days.
FJ wants to create a budget(预算) for a sequential(连续的) set of exactly M (1 ≤ M ≤ N) fiscal(会计的) periods called "fajomonths". Each of these fajomonths contains a set of 1 or more consecutive(连贯的)days. Every day is contained in exactly one fajomonth.
FJ's goal is to arrange the fajomonths so as to minimize(使减到最少) the expenses of the fajomonth with the highest spending and thus determine his monthly spending limit.
Input
Lines 2.. N+1: Line i+1 contains the number of dollars Farmer John spends on the ith day
Output
Sample Input
7 5 100 400 300 100 500 101 400
Sample Output
500
Hint
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
using namespace std;
int main()
{
int n, m, low, high, mid, MAX = 0, a[100010], sum = 0, ans;
scanf("%d%d", &n, &m);
for(int i = 0;i<n;++i)
{
scanf("%d", &a[i]);
sum+=a[i];
if(MAX<a[i])MAX= a[i];
}
high = sum;
low = MAX;
while(low<=high)
{
mid = (low+high)/2;
ans = 1;
sum = 0;
for(int i = 0; i<n;++i)
{
sum+=a[i];
if(sum>mid)
{
sum = a[i];
ans++;
}
}
if(ans<=m)
{
high = mid-1;
MAX = mid;
}
else
low = mid+1;
}
printf("%d\n", MAX);
return 0;
}