Data Structure
 Networking
 RDBMS
 Operating System
 Java
 MS Excel
 iOS
 HTML
 CSS
 Android
 Python
 C Programming
 C++
 C#
 MongoDB
 MySQL
 Javascript
 PHP
- Selected Reading
 - UPSC IAS Exams Notes
 - Developer's Best Practices
 - Questions and Answers
 - Effective Resume Writing
 - HR Interview Questions
 - Computer Glossary
 - Who is Who
 
Program to find minimum largest sum of k sublists in C++
Suppose we have a list of numbers called nums and another value k. We can split the list into k non-empty sublists. We have to find the minimum largest sum of the k sublists.
So, if the input is like nums = [2, 4, 3, 5, 12] k = 2, then the output will be 14, as we can split the list like: [2, 4, 3, 5] and [12].
To solve this, we will follow these steps −
Define a function ok(), this will take array v, k, x,
cnt := 0, sum := 0
- 
for each element i in v −
- 
if sum + i > x, then −
sum := i
(increase cnt by 1)
 - 
Otherwise
sum := sum + i
 
 - 
 return true when cnt <= k, otherwise false
From the main method do the following −
low := 0, ret := 0, high := 0
- 
for each element i in nums
high := high + i
ret := ret + i
low := maximum of low and i
 - 
while low <= high, do −
mid := low + (high - low) / 2
- 
if ok(nums, k - 1, mid) is true, then −
ret := mid
high := mid - 1
 - 
Otherwise
low := mid + 1
 
 return ret
Example
Let us see the following implementation to get better understanding −
#include <bits/stdc++.h>
using namespace std;
bool ok(vector <int>& v, int k, int x){
   int cnt = 0;
   int sum = 0;
   for(int i : v){
      if(sum + i > x){
         sum = i;
         cnt++;
      }
      else{
         sum += i;
      }
   }
   return cnt <= k;
}
int solve(vector<int>& nums, int k) {
   int low = 0;
   int ret = 0;
   int high = 0;
   for(int i : nums){
      high += i;
      ret += i;
      low = max(low, i);
   }
   while(low <= high){
      int mid = low + ( high - low) / 2;
      if(ok(nums, k - 1, mid)){
         ret = mid;
         high = mid - 1;
      }
      else{
         low = mid + 1;
      }
   }
   return ret;
}
int main(){
   vector<int> v = {2, 4, 3, 5, 12};
   int k = 2;
   cout << solve(v, k);
}
Input
{2, 4, 3, 5, 12}, 2
Output
14