Pagini recente » Cod sursa (job #961283) | Cod sursa (job #3219232) | Cod sursa (job #491940) | Cod sursa (job #2934897) | Cod sursa (job #1785237)
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int n, k, v[16005], maxi = -1, suma = 0;
void Read(){
in >> n >> k;
for(int i = 0; i < n; ++i){
in >> v[i];
if(maxi < v[i])
maxi = v[i];
suma += v[i];
}
}
int works(int pos){
int total = 1, current = 0;
for(int i = 0; i < n; ++i){
if(current + v[i] > pos){
total++;
current = 0;
current += v[i];
}
else
current += v[i];
}
if(total > k)
return 0;
else
return total;
}
int BinarySearch(){
int left = maxi, right = suma, mid, sol = 16000 * 16000 + 3;
while(left <= right){
mid = (left + right) / 2;
if(works(mid) < sol && works(mid) != 0){
sol = mid;
right = mid - 1;
}
else
left = mid + 1;
}
return sol;
}
int main(){
Read();
out << BinarySearch() << "\n";
return 0;
}