Pagini recente » Cod sursa (job #178231) | Cod sursa (job #1999041)
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;
int n, k, v[16001];
int valid ( int c, int n, int k, int v[] ) {
int i;
for ( i = 1; i <= n; i++ ) {
int sum = v[i];
while ( sum < c ) {
++i;
sum += v[i];
}
if ( sum > c ) {
sum -= v[i];
--i;
}
k--;
}
if ( k < 0 ) {
return 0;
}
return 1;
}
int main() {
ifstream f("transport.in");
ofstream g("transport.out");
f>>n>>k;
int sum = 0;
int Max = 0;
for ( int i = 1; i <= n; i++ ) {
f>>v[i];
if ( v[i] > Max ) {
Max = v[i];
}
sum += v[i];
}
int l = Max;
int r = sum;
int Min = INT_MAX;
while ( l <= r ) {
int c = ( l + r ) / 2;
if ( valid(c, n, k, v) == 1 ) {
if ( Min > c ) {
Min = c;
}
r = c - 1;
}
else {
l = c + 1;
}
}
g<<Min;
return 0;
}