百練OJ-月度開銷
阿新 • • 發佈:2019-01-30
#include<iostream> #include<cstring> using namespace std; bool check(int mid, int m, int*kaixiao,int n) { int sum = 0; int yue = 1; for (int i = 0; i < n; i++) { if (sum+ kaixiao[i]<= mid) { sum += kaixiao[i]; } else { sum = kaixiao[i]; yue++; } } if (yue <= m) { return 1; } else { return 0; } } int main() { int n, m; cin >> n >> m; int*kaixiao = new int[n]; //int*fagos = new int[m]; int r = 0; int l = 0; for (int i = 0; i < n; i++) { cin >> kaixiao[i]; r += kaixiao[i]; if (l < kaixiao[i]) l = kaixiao[i]; } int result = 0; while (l <= r) { int mid = (l + r) >> 1; if (check(mid = mid, m = m, kaixiao = kaixiao,n=n)) { r = mid - 1; result = mid; } else { l = mid + 1; } } cout <<result; return 0; }