Pagini recente » Cod sursa (job #409043) | Cod sursa (job #2110617) | Cod sursa (job #2967599) | Cod sursa (job #1315117) | Cod sursa (job #3281692)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
const int NMAX=16000;
int n,saltele[NMAX+1],k;
int index,transport_sum;
bool grupare(int nr_transporturi,int max_g){
for(int i=1;i<=n;i++)
{
if(transport_sum+saltele[i]<=max_g)
transport_sum+=saltele[i];
else
{
nr_transporturi--;
if(nr_transporturi<0)
return false;
transport_sum=saltele[i];
}
}
return true;
}
void cautare(int max_nr,int sum, int &min_g){
int l=max_nr,r=sum;
int m;
bool flag;
while(l<=r){
m=(l+r)/2;
if(grupare(k,m)==true){
min_g=m;
r=m-1;
}
else
l=m+1;
}
}
int main()
{
fin>>n>>k;
int max_nr=0,sum=0,min_g=0;
for(int i=1;i<=n;i++)
{
fin>>saltele[i];
max_nr=max(max_nr,saltele[i]);
sum+=saltele[i];
}
cautare(max_nr,sum,min_g);
fout<<min_g;
return 0;
}