Pagini recente » Cod sursa (job #2989259) | Cod sursa (job #2146680) | Cod sursa (job #1648547) | Cod sursa (job #1317686) | Cod sursa (job #1504300)
#include <iostream>
using namespace std;
int a[30], i, n, k;
int check(int x)
{int c=0, v=1;
i=1;
while(i<=n && v==1)
{
int s=0;
int ok=1;
while(s<=x && ok)
{if(a[i]>x) ok=v=0;
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, 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];}
int gasit=0;
int j=max, l=sum;
while(j<=l && gasit==0)
{
int m=(j+l)/2;
if(check(m)==1)
{
if(check(m-1)==0) gasit=1, cap=m;
else l=m;
}
else
{
if(check(m+1)==1) gasit=1, cap=m+1;
else j=m+1;
}
}
cout<<cap;
return 0;
}