Pagini recente » Cod sursa (job #2572516) | Cod sursa (job #2784011) | Cod sursa (job #1428710) | Cod sursa (job #1249610) | Cod sursa (job #1966215)
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
#define nmax 16005
int st[nmax], n, k, mx, s;
void citire()
{
int vf;
fin>>n>>k;
vf=n;
while(vf>0)
{
fin>>st[vf];
vf--;
}
fin.close();
}
void sumaSiMax()
{
int i;
for(i=1; i<=n; i++)
{
if(st[i]>mx)
mx=st[i];
s+=st[i];
}
}
int calculeaza(int c)
{
int i, s, nrtr=0;
i=n;
while(i>0)
{
s=0;
while(s+st[i]<=c && i>0)
{
s+=st[i];
i--;
}
nrtr++;
}
if(nrtr>k)
return 1;
return -1;
}
void solve()
{
int st, dr, m, c, cap=0;
st=mx; dr=s;
while(st<=dr)
{
m=(st+dr)/2;
c=calculeaza(m);
if(c>0)
st=m+1;
else
{
dr=m-1;
cap=m;
}
}
fout<<cap<<'\n';
fout.close();
}
int main()
{
citire();
sumaSiMax();
solve();
return 0;
}