Pagini recente » Cod sursa (job #1357917) | Cod sursa (job #2110852) | Cod sursa (job #2981755) | Cod sursa (job #1388086) | Cod sursa (job #1504330)
#include <iostream>
#include <fstream>
using namespace std;
int a[10], i, n, k;
int check(int x)
{int c=0, s, ok;
i=1;
while(i<=n)
{
s=0;
ok=1;
while(s<=x && ok==1)
{if(a[i]>x && s==0) ok=0, i=n+1;
else if(s+a[i]<=x) s=s+a[i], i++;
else ok=0, c++;}
}
if(c>k || c==0) return 0;
return 1;
}
int main()
{int max=0, sum=0, m;
ifstream f("transport.in");
ofstream g("transport.out");
f>>n>>k;
for(i=1; i<=n; i++)
{f>>a[i];
if(a[i]>max) max=a[i];
sum=sum+a[i];}
int gasit=0;
while(max<=sum && gasit==0)
{
m=(max+sum)/2;
if(check(m)==1)
{
if(check(m-1)==0) gasit=m;
else sum=m;
}
else
{
if(check(m+1)==1) gasit=m+1;
else max=m+1;
}
}
g<<gasit;
f.close();
g.close();
return 0;
}