How to solve the partition problem with dynamic programming

What is the partition problem?

In the partition problem, you find out whether a given array of size n can be split into two parts with the same sum.

The sum of the array should be even; otherwise, there would be no possible subsets with the same sum. Hence, the first step is to determine whether the sum is even.

If the sum is even, then we calculate sum/2 and find if any subset of the array has a sum equal to sum/2.

Use dynamic programming to solve the problem

To solve the partition problem with dynamic programming, we keep a 2D array of size [sum/2 + 1][n+1]. The optimal substructure is defined below.

partition[i][j] = 1 if there exists a subset of the array (from index 0 to j-1) with sum equal to i, otherwise 0

An example is shown in the diagram below.

Implementation

#include <iostream>
using namespace std;
bool partitionProblem(int arr[], int n){
int sum = 0;
for ( int i=0; i < n; i++ )
sum += arr[i];
int halfSum = sum/2;
if( sum % 2 != 0 )
return false;
bool partition[ halfSum + 1 ][ n + 1 ] = { 0 };
//initializing the first row as 1 since the sum 0
//is present in the empty subset
for( int j = 0; j < n; j++ )
partition[0][j] = 1;
for (int i = 1; i <= halfSum; i++) {
for (int j = 1; j <= n; j++) {
partition[i][j] = partition[i][j - 1];
if ( !partition[i][j] && i >= arr[j - 1] )
partition[i][j] = partition[i - arr[j - 1]][j - 1];
}
}
return partition[halfSum][n];
}
int main() {
// you can change the array here
int arr[4] = { 1,3,2,4 };
cout << partitionProblem(arr, 4);
return 0;
}
New on Educative
Learn to Code
Learn any Language as a beginner
Develop a human edge in an AI powered world and learn to code with AI from our beginner friendly catalog
🏆 Leaderboard
Daily Coding Challenge
Solve a new coding challenge every day and climb the leaderboard

Free Resources

Copyright ©2025 Educative, Inc. All rights reserved