Pagini recente » Cod sursa (job #1494489) | Cod sursa (job #1539148) | Cod sursa (job #1377175) | Cod sursa (job #2769744) | Cod sursa (job #987250)
Cod sursa(job #987250)
#include <iostream>
#include <stdio.h>
#include <fstream>
#define MAX_N 16001
using namespace std;
int v[MAX_N],n,k;
long long int answer=MAX_N,l,r;
ofstream out("transport.out");
int maxim(int a, int b)
{
if(a<b) return b;
return a;
}
int minim(long long int a, long long int b)
{
if(a<b) return a;
return b;
}
void citire()
{
freopen("transport.in", "r", stdin);
scanf("%d %d",&n, &k);
int i;
for(i=1; i<=n; i++)
{
scanf("%d",&v[i]);
l=maxim(l,v[i]);
r+=v[i];
}
}
int numar_curent_transporturi(int capacity)
{
int cs=capacity, answer=0,i;
for(i=1; i<=n; i++)
{
if(v[i]<=cs) cs-=v[i];
else
{
answer++,cs=capacity;
cs-=v[i];
}
}
if(cs>0) return answer+1;
return answer;
}
void cautare_binara(int left, int right)
{
//out<<left<<' '<<right<<endl;
if(left<=right)
{
int m=(left+right)/2,current_value;
current_value=numar_curent_transporturi(m);
if(current_value<=k)
{
answer=minim(answer,m);
cautare_binara(left,m-1);
}
else cautare_binara(m+1,right);
}
}
int main()
{
citire();
cautare_binara(l,r);
out<<answer;
return 0;
}