Cod sursa(job #1504107)

Utilizator AureliaCretu Aurelia Aurelia Data 17 octombrie 2015 12:26:39
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <iostream>

using namespace std;
int a[30], i, n, k;
int check(int x)
{int c=0;
   i=1;
   while(i<=n)
   {
    int s=0;
    int ok=1;
    while(s<=x && ok) if(s+a[i]<=x) s=s+a[i], i++;
                      else ok=0;
    c++;
   }

if(c>k) return 0;
return 1;
}

int main()
{int max=0, sum=0, n1, n2, b[30], cap=0;
cout<<"n=";
cin>>n;
cout<<"k=";
cin>>k;
for(i=1; i<=n; i++)
{cin>>a[i];
if(a[i]>max) max=a[i];
sum=sum+a[i];}
i=max;
int j=1;
while(i<=sum) b[j]=i, i++, j++;
int l=j-1;
j=1;
int ok=0;
while(j<=l&& !ok)
{
    int m =(j+l)/2;
    if(check(b[m]) && !check(b[m-1])) cap=b[m], ok=1;
    else if(check(b[m])) l=m;
           else j=m;
}
cout<<cap;
}