Cod sursa(job #1830266)
| Utilizator | Data | 16 decembrie 2016 14:57:24 | |
|---|---|---|---|
| Problema | Transport | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.76 kb |
#include <fstream>
#include <limits.h>
using namespace std;
int n,k,S,Max,dr,st,i,j,mid,s,nr,sol,v[16001];
int main()
{
ifstream cin("transport.in");
ofstream cout("transport.out");
cin>>n>>k;
S=0;
Max=0;
for(i=1;i<=n;i++){
cin>>v[i];
S=S+v[i];
if(v[i]>Max)
Max=v[i];
}
st=Max;
dr=S;
while(st<=dr){
mid=(st+dr)/2;
nr=1;
s=v[1];
for(j=2;j<=n;j++)
if(s+v[j]<=mid)
s=s+v[j];
else{
s=v[j];
nr++;
}
if(nr<=k){
sol=mid;
dr=mid-1;
}
else
st=mid+1;
}
cout<<sol;
return 0;
}
