Subscribe Us

Responsive Advertisement

Advertisement

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;


}


Post a Comment

0 Comments