Pagini recente » Cod sursa (job #2029325) | Cod sursa (job #2299853) | Cod sursa (job #1649163) | Cod sursa (job #1886844) | Cod sursa (job #589069)
Cod sursa(job #589069)
#include <cstdio>
#include <fstream>
using namespace std;
#define m 16001
int v[m];
int n,k,x,s,sol;
int vrf (int min){
int q=1;
for(int i=1;i<=n&&q<=k;++q){
int j=i,s=0;
for(;s+v[j]<=min&&j<=n;++j){
s+=v[j];
}
i=j;
}
if(q<=k)
return 1;
return 0;
}
void cauta (int st, int dr)
{
if (st==dr)
{
if (st<sol && vrf(st))
sol=st;
return;
}
int mid=(st+dr)>>1;
if (vrf(mid))
{
if (mid<sol)sol=mid;
cauta(st, mid);
}
else
cauta(mid+1, dr);
}
int main ()
{
ifstream in ("transport.in");
freopen ("transport.out","w",stdout);
in>>n>>k;
for(int i=1;i<=n;++i){
int x;
in>>x;
v[i]=x;
s+=x;
}
sol=s;
cauta (v[1],s);
printf("%d",sol);
return 0;}