SUBSET SUM & PARTITION PROBLEM : Dynamic Programming
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define endl "\n"
ll arr[201];
int dp[201][20005];
bool func(ll indx,ll sum)
{
if(sum==0)return true;
if(indx<0)return false;
if(dp[indx][sum]!=-1)return dp[indx][sum];
bool r=func(indx-1,sum);
if(sum-arr[indx]>=0)
{
r|=func(indx-1,sum-arr[indx]);
}
return dp[indx][sum]=r;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
memset(dp,-1,sizeof(dp));
ll n,i,sum=0;
sum=0;
cin>>n;
for(i=0;i<n;i++)
{
cin>>arr[i];
sum+=arr[i];
}
if(sum%2)cout<<"False\n";
else
{
if(func(n-1,sum/2))cout<<"true\n";
else cout<<"False\n";
}
return 0;
}
0 Comments