Showing posts with label subset. Show all posts
Showing posts with label subset. Show all posts

Saturday, 14 September 2013

subset sum problem

#include<stdio.h>

int memo[6][10];

int subset_sum(int *a,int sum,int n)
{
                   if(sum==0)
                   {        
                             return 1;
                   }
                   if(n==0 && sum!=0)
                   {
                           return 0;
                   }
                   if(a[n-1]>sum)
                                   return subset_sum(a,sum,n-1);
                 
                   if(memo[n][sum]!=0) return memo[n][sum];
                   else
                   return memo[n][sum]= subset_sum(a,sum-a[n-1],n-1) || subset_sum(a,sum,n-1);                    
}
main()
{
      int a[]={3,34,4,12,5,2,5,6};
      int sum=35;
      int i=0;
      int j=0;
      for(;i<6;i++)
      {
              for(;j<20;j++)
              {
                      memo[i][j]=0;
              }
      }
      printf("%d\n\n",subset_sum(a,sum,6));
      getch();
}

subset sum display

#include<stdio.h>

int memo[6][10];

void display(int *sub,int n)
{
     int i=0;
     while(i<n)
     {
               printf("%d\n",sub[i]);
               i++;
     }
     printf("\n end\n");
}

void subset_sum(int *a,int *sub,int sum,int n)
{
                   static int i=0;
                   if(sum==0)
                   {        
                             display(sub,i);
                             return ;
                   }
                   if(n==0 && sum!=0)
                   {
                           return ;
                   }
                   if(a[n-1]>sum)
                                   subset_sum(a,sub,sum,n-1);
                   sub[i]=a[n-1];
                   ++i;
                   subset_sum(a,sub,sum-a[n-1],n-1);
                   i--;
                   subset_sum(a,sub,sum,n-1);                    
}
main()
{
      int a[]={3,34,4,12,5,2,5,6};
      int sub[10];
      int sum=6;
      int i=0;
      int j=0;
      for(;i<6;i++)
      {
              for(;j<20;j++)
              {
                      memo[i][j]=0;
              }
      }
      subset_sum(a,sub,sum,8);
      getch();
}