Algorithm-Renewed
This commit is contained in:
58
Algorithm/Greedy/UVa714Copying-Books.cpp
Normal file
58
Algorithm/Greedy/UVa714Copying-Books.cpp
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user