Pagini recente » Cod sursa (job #2965225) | Cod sursa (job #3232637) | Cod sursa (job #2651054) | Cod sursa (job #599015) | Cod sursa (job #469458)
Cod sursa(job #469458)
#include<fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int n,k,v[1<<14],sum;//2^14
//tre sa folosesc vector de sume partiale
/*
caut numere dn ce in ce mai mari
pt care se indeplinesc conditiile
*/
void read()
{
sum=0;
in>>n>>k;
for(int i=1;i<=n;i++)
{
in>>v[i];
sum+=v[i];
}
}
bool suma(int x)//merge impartit in x
{
int q=0,s=0,d=1,i=1;
while(i<=k)
{
s=0;
while(d<=n)
{
if(s+v[d]<=x)
{
s+=v[d];
d++;
}
else
break;
}
q+=s;
i++;
}
if(q<sum)
return false;
return true;
}
int main()
{
read();
int j,p=1<<14;
for(j=0;p!=0;p>>=1)
if((j+p <=16000) && suma(j+p)==false)
j+=p;
out<<j+1;
return 0;
}