P3273

P3273

 

#include  < iostream >
using   namespace  std;

int  n,m;
int   const  MAXN = 100010 ;
int  num[MAXN];
int  main()
{
    cin
>>n>>m;
    
int l=0,r=0;
    
for (int i=1;i<=n;i++)
    
{
        cin
>>num[i];
        r
+=num[i];
        
if (l<num[i]) l=num[i];
    }

    
int mid;
    
while(l<=r)
    
{
     mid
=(l+r)/2;

     
int count=1,sum=0;
     
int max_=-1;
     
for (int i=1;i<=n;i++)
     
{
      
if (num[i]>mid) {count=m+1;break;}
      
if (sum+num[i]<=mid) sum+=num[i]; 
      
else 
      
{
       sum
=num[i];count++;
      }

      
if (max_<sum) max_=sum;
     }

      
if (count<=m) {r=mid-1;}
     
else l=mid+1;
    }

    cout
<<l<<endl;

    
return 0;
}

练2分- -

你可能感兴趣的:(P3273)