Pagini recente » Cod sursa (job #1028690) | Cod sursa (job #2389323) | Cod sursa (job #52632) | Cod sursa (job #1870375) | Cod sursa (job #2611870)
#include<cstdio>
#define MAX_N 16000
#define oo 0x3f3f3f3f
using namespace std;
int v[MAX_N+1], n, k, sum, maxV, ans;
void read() {
FILE* fin = fopen("transport.in","r");
fscanf(fin,"%d%d",&n,&k);
maxV = -1;
for(int i = 0; i < n; i++) {
fscanf(fin,"%d",&v[i]);
if(v[i] > maxV)
maxV = v[i];
sum += v[i];
}
v[n] = oo;
fclose(fin);
}
bool sePoate(int vmax) {
int i, s, nrt;
i = s = nrt = 0;
while(i <= n && nrt <= k) {
if(s + v[i] <= vmax)
s += v[i];
else {
s = v[i];
nrt++;
}
i++;
}
if(nrt <= k) return true;
return false;
}
void binarySearch(int Begin, int End) {
int b = Begin, e = End, mid;
while(b <= e) {
mid = (b + e) >> 1;
if(sePoate(mid)) {
ans = mid;
e = mid - 1;
} else b = mid + 1;
}
}
void write() {
FILE* fout = fopen("transport.out","w");
fprintf(fout,"%d\n",ans);
fclose(fout);
}
int main() {
read();
binarySearch(maxV,sum);
write();
return 0;
}