标签: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