1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include <stdio.h> #define INF 1e9 int arr[100001] = { 0 }; int main() { int n, m; scanf("%d %d", &n, &m); int low = 0, high = INF / m; for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); if (low < arr[i]) low = arr[i]; } while (low <= high) { int mid = (low + high) / 2; int sum = 0, tmp=0; for (int i = 0; i < n; i++) { if (sum + arr[i] > mid) { sum = 0; tmp++; } sum += arr[i]; } if (sum != 0) tmp++; if (tmp > m) low = mid + 1; else high = mid - 1; } printf("%d", low); } | cs |
'알고리즘 > Divide and Conquer-이분탐색' 카테고리의 다른 글
이진검색 더블릿 (PS) (0) | 2019.02.13 |
---|---|
공격적인 소 더블릿 (Aggressive Cow) (0) | 2019.02.12 |
2343 기타레슨 (PS) (0) | 2019.02.12 |
2512 예산 (PS) (0) | 2019.02.11 |
2805 나무 자르기 (PS) (0) | 2019.02.11 |