Pagini recente » Cod sursa (job #1725124) | Cod sursa (job #1571920) | Cod sursa (job #2883521) | Cod sursa (job #2337323) | Cod sursa (job #3281695)
#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;
bool grupare(int nr_transporturi,int max_g){
int transport_sum=0;
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;
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;
}