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 38 39 40 41 42 | #include <stdio.h> #define INF 1e9 int arr[100001] = { 0 }; int main() { int n, m; scanf("%d %d", &n, &m); int low = 0,high; high = INF / m; for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); if (arr[i] > low) low = arr[i]; } int tmp=1,mid; while (low<= high) { int sum = 0; mid = (low + high) / 2; for (int i = 0; i < n; i++) { if (sum + arr[i] <= mid) { sum +=arr[i]; } else { sum = arr[i]; tmp++; } } if (tmp <= m) { high = mid-1; } else { low = mid+1; } tmp = 1; } printf("%d", low); } | cs |
'알고리즘 > Divide and Conquer-이분탐색' 카테고리의 다른 글
이진검색 더블릿 (PS) (0) | 2019.02.13 |
---|---|
공격적인 소 더블릿 (Aggressive Cow) (0) | 2019.02.12 |
6236 용돈관리 (PS) (0) | 2019.02.12 |
2512 예산 (PS) (0) | 2019.02.11 |
2805 나무 자르기 (PS) (0) | 2019.02.11 |