Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
127740 | 罗恩祥 | 花费 | C++ | 解答错误 | 50 | 0 MS | 264 KB | 892 | 2024-01-25 10:06:33 |
#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++) { if(sum + lst[i] > num) { k++; sum = lst[i]; } else sum += lst[i]; } 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 = Max + 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; }