Pagini recente » Cod sursa (job #2230269) | Cod sursa (job #2492883) | Cod sursa (job #2106092) | Cod sursa (job #603136) | Cod sursa (job #555856)
Cod sursa(job #555856)
// http://infoarena.ro/problema/transport
#include <fstream>
using namespace std;
const int maxSize = 16001;
ifstream in("transport.in");
ofstream out("transport.out");
int length,maxTransports;
int size[maxSize];
int transports(int capacity);
int main() {
in >> length >> maxTransports;
for(int i=1;i<=length;i++)
in >> size[i];
int left = 1;
int capacity;
int right = maxSize;
/*while(left < right) {
capacity = (left + right) / 2;
int currentTransports = transports(capacity);
if(currentTransports > maxTransports)
left = capacity + 1;
else
if(currentTransports < maxTransports)
right = capacity;
else
if(capacity != 1 && transports(capacity-1) == currentTransports)
right = capacity;
else
break;
}*/
for(int i=1;i<=maxSize;i++)
if(transports(i) == maxTransports) {
out << i << "\n";
break;
}
//out << transports(8);
//out << capacity << "\n";
return (0);
}
int transports(int capacity) {
int answer = 0;
int currentLoad = 0;
for(int i=1;i<=length;i++)
if(currentLoad + size[i] <= capacity)
currentLoad += size[i];
else {
currentLoad = size[i];
answer++;
}
if(currentLoad)
answer++;
return answer;
}