/PTIT125E - Chia kẹo cho 3 nhóm

<Problem>

https://www.spoj.com/PTIT/problems/PTIT125E/
              #include <iostream>
      #include <cmath>
       
      using namespace std;
       
      int main() {
          int n;
          cin >> n;
          
          int arr[22];
          int sum = 0;
          for (int i = 1; i <= n; i++) {
              cin >> arr[i];
              sum += arr[i];
          }
          //cout << "=";
          
          int f[22][2001][2001];
          
          for (int i = 0; i <= n; i++) 
              for (int j = 0; j <= sum; j++)
                  for (int k = 0; k <= sum; k++)
                      f[i][j][k] = 0;
          
          for (int i = 1; i <= n; i++) {
              f[i][0][0] = 1;
              f[i][arr[i]][0] = 1;
              f[i][0][arr[i]] = 1;
              for (int j = 0; j <= sum; j++)
                  for (int k = 0; k <= sum; k++) {
                      if (f[i - 1][j][k]) f[i][j][k] = 1;
                      else if (j - arr[i] >= 0 && f[i - 1][j - arr[i]][k]) f[i][j][k] = 1;
                      else if (k - arr[i] >= 0 && f[i - 1][j][k - arr[i]]) f[i][j][k] = 1;
                  }
          }            
       
          int res = sum;
          for (int j = 0; j <= sum; j++) 
              for (int k = 0; k <= sum; k++) {
                  if (f[n][j][k]) {
                      int d = max(j, max(k, sum - j - k));
                      res = min(d, res);
                  } 
              }
          cout << res << endl;
          
          return 0;
      }