Algorithm-Renewed

This commit is contained in:
e2hang
2025-09-13 22:37:17 +08:00
parent 265b8af720
commit 7b6acef275
14 changed files with 778 additions and 1 deletions

View File

@@ -0,0 +1,58 @@
#include <iostream>
#include <vector>
#include <algorithm>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>->
//<2F><><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD> mid = (low + high) / 2
//̰<><CCB0><EFBFBD><EFBFBD>֤ <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7>ʽ
using namespace std;
bool check(const vector<int>& a, int target, int k) {
int js = 1; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD>дԱ
int temp = 0; // <20><>ǰ<EFBFBD><C7B0>дԱ<D0B4><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for (int i = 0; i < a.size(); i++) {
if (a[i] > target) return false; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD> target<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (temp + a[i] > target) { // <20><><EFBFBD><EFBFBD> target<65><74><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>дԱ
js++;
temp = a[i];
} else {
temp += a[i];
}
}
return js <= k; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
}
int main(){
int n, k;
cin >> n >> k;
vector<int> arr;
arr.resize(n);
int max = 0;
int sum = 0;
for(int i = 0; i < n; i++){
cin >> arr[i];
if(max < arr[i]) max = arr[i];
sum += arr[i];
}
int left = max;
int right = sum;
int result = right;
while (left <= right) {
int mid = left + (right - left) / 2;
if (check(arr, mid, k)) {
result = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
cout << result << endl;
return 0;
}