标签:des style blog http io color ar os java
5 3 3 2 9 4 1
9
初次接触二分答案,简单的说,就是对一个问题的答案,我们可以大致确定一个范围,然后在这个范围中二分,为什么可以二分呢?其实是有要求的,答案要具有单调性。就是说对于mid,经过判断后,我们可以确定答案一定是在mid左还是mid右。二分答案常用于求极大值中的最小值,极小值中的最大值等。。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cctype>
#include <vector>
#include <cstdio>
#include <cmath>
#include <deque>
#include <stack>
#include <map>
#include <set>
#define ll long long
#define maxn 100010
#define pp pair<int,int>
#define max(x,y) ( ((x) > (y)) ? (x) : (y) )
#define min(x,y) ( ((x) > (y)) ? (y) : (x) )
using namespace std;
int n, m, a[maxn], high, low;
bool jduge(int mid)
{
int cnt = 1, s = 0;
for (int i = 0; i < n; i++) {
if (s + a[i] <= mid) {
s += a[i];
} else {
cnt++;
s = a[i];
}
}
if (cnt <= m) {
return 1;
} else {
return 0;
}
}
void solve()
{
int mid;
while (low <= high) {
mid = (low + high) / 2;
if (jduge(mid)) {
high = mid - 1;
} else {
low = mid + 1;
}
}
printf("%d\n", mid);
}
int main()
{
while (~scanf("%d%d", &n, &m)) {
high = 0;
low = 0;
for (int i = 0; i < n; i++) {
scanf("%d", a + i);
low = max(a[i], low);
high += a[i];
}
solve();
}
return 0;
}
标签:des style blog http io color ar os java
原文地址:http://blog.csdn.net/qq_16255321/article/details/41054909