Cod sursa(job #428935)
| Utilizator | Data | 29 martie 2010 18:04:36 | |
|---|---|---|---|
| Problema | Transport | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.54 kb |
#include<fstream.h>
ifstream f("transport.in");
ofstream g("transport.out");
int v[16010], n, k, p ,i;
int suma, u, m, max;
int pot(int c){
int nr=1, cc=0;
for(int i=1;i<=n;i++){
if(cc+v[i]<=c)
cc+=v[i];
else{
nr++;
cc=v[i];
}
}
if(nr>k) return 0;
else
return 1;
}
int main(){
f>>n>>k;
for(i=1;i<=n;i++){
f>>v[i];
suma+=v[i];
if(v[i]>max) max=v[i];
}
p=max; u=suma;
while(p<=u){
m=(p+u)/2;
if(pot(m))
u=m-1;
else
p=m+1;
}
g<<p;
f.close();
g.close();
return 0;
}
