Nu exista pagina, dar poti sa o creezi ...
Cod sursa(job #2594864)
Utilizator | Data | 6 aprilie 2020 18:39:15 | |
---|---|---|---|
Problema | Transport | Scor | 80 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva de probleme | Marime | 0.7 kb |
#include <bits/stdc++.h>
using namespace std;
int n,k,v[16010];
bool posibil(int vol) {
int nrt = 1, s = 0;
for(int i=1; i<=n; i++) {
if(s+v[i]<=vol)
s+=v[i];
else {
nrt++;
s=v[i];
}
}
if(nrt<=k) return true;
return false;
}
int main () {
ifstream f ("transport.in");
ofstream g ("transport.out");
int ma = 0,sum = 0;
f >> n >> k;
for(int i=1; i<=n; i++) {
f >> v[i];
ma=max(v[i],ma);
sum+=v[i];
}
int pmax = 0;
int rez;
while(1<<(pmax+1)<=sum) pmax++;
rez=(1<<pmax);
for(int p=pmax; p>=0; p--)
if(posibil(rez-(1<<p))) rez-=(1<<p);
g << rez;
return 0;
}