Pagini recente » Cod sursa (job #853710) | Cod sursa (job #2908904) | Cod sursa (job #557272) | Cod sursa (job #1162323) | Cod sursa (job #525677)
Cod sursa(job #525677)
#include<fstream>
#define dmax 16010
#define inf 999999999
using namespace std;
int n,k;
int a[dmax];
long long maxvol,sumavol;
long long sol=inf;
void citire()
{
int i;
ifstream fin("transport.in");
fin>>n>>k;
for (i=1; i<=n; i++)
{
fin>>a[i];
if (a[i] > maxvol)
maxvol=a[i];
sumavol += a[i];
}
fin.close();
}
int verificare(int c)
{
int i,nr=1;
long long tcurent=0;
for (i=1; i<=n; i++)
if (tcurent + a[i] <= c)
tcurent += a[i]; else
{
tcurent = a[i];
nr++;
if (nr > k)
break;
}
if (nr <= k)
{
if (c < sol)
sol=c;
return 1;
} else
return 0;
}
void cautare (long long st, long long dr)
{
long long mijl=(st+dr)/2;
if (st <= dr)
if (verificare(mijl))
cautare(st, mijl-1); else
cautare(mijl+1, dr);
}
void afisare()
{
ofstream fout("transport.out");
fout<<sol;
fout.close();
}
int main()
{
citire();
cautare(maxvol, sumavol);
afisare();
return 0;
}