提交时间:2024-01-25 10:27:19
运行 ID: 127814
#include <bits/stdc++.h> using namespace std; long long lst[100001]; long long lst2[100001]; long long N,M; //N分成M bool check(long long num) { long long k = 1; //分成几天 long long sum = 0; for(int i = 1;i <= N;i++) { sum += lst[i]; if(sum > num) { sum = lst[i]; k++; } } // if(sum != 0) k++; return k <= M; } int main() { cin >> N >> M; long long S = 0,Max = 0,Min = 0x3f3f3f3f; for(int i = 1;i <= N;i++) { cin >> lst[i]; S += lst[i]; Max = max(Max,lst[i]); Min = min(Min,lst[i]); } if(N == M) //分成的份数 == 总份数 { cout << Max; return 0; } if(M == 1) { cout << S; return 0; } long long l = Min,r = S+1; long long minn = 0x3f3f3f3f; while(l < r) { long long mid = (l + r) / 2; if(check(mid)) r = mid; else l = mid + 1; } cout << r << endl; }