Pagini recente » Cod sursa (job #227937) | Rezultatele filtrării | Cod sursa (job #112129) | Cod sursa (job #1651616) | Cod sursa (job #3302431)
#include <bits/stdc++.h>
using namespace std;
const int NMAX=16e3;
int n,k,d;
long long int a[NMAX+1];
long long int v[NMAX+1];
bool check (int x)
{
int nr=1;
int nx=x;
int t;
for( int i=1;i<=n;i++)
{
if(nx>=a[i])
{
nx-=a[i];
}
else
{
nr++;
nx=x-a[i];
}
}
if(nr<=k)return 1;
else return 0;
}
int main()
{
ifstream cin ("transport.in");
ofstream cout ("transport.out");
int st=0;
cin >>n >> k;
for(int i=1;i<=n;i++)
{
cin >> a[i];
if(a[i]>st)
{
st=a[i];
}
d+=a[i];
}
int dr=d;
int sol=0;
while ( st<=dr)
{
int mid=(st+dr)/2;
if(check(mid)==1){sol=mid; dr= mid-1;
}
else {
st=mid+1;
}
}
cout <<sol;
return 0;
}