IMplement 0/1 knapsack problem using Dynamic programming in C

Ram Pothuraju
#include< stdio.h >
#include< conio.h >
#define MAX 20
void knapsackDP(int,int);

int max(int,int);
void backtracking();
int weight[MAX],value[MAX],W,no,*x;
int v[MAX][MAX];


void main()
{
 int i,j;
 clrscr();
 printf("\n Enter number of Object you want:");
 scanf("%d",&no);
 printf("\n Enter weight and values in ascending order of vales");;
 for(i=1;i<=no;i++)
 {
  printf("\n Enter Weight and Value for Object %d:",i);
  scanf("%d %d",&weight[i],&value[i]);
 }
 printf("\n Enter knapsack Capacity:");
 scanf("%d",&W);

 knapsackDP(no,W);
 backtracking();
getch();
}

void knapsackDP(int no,int W)
{
 int i,j;

 for(i=0;i<= W ;i++)
  v[0][i]=0;

 for(i=0;i<= no;i++)
  v[i][0]=0;

 for(i=1;i<= no;i++)
 {
  for(j=1;j<= W;j++)
  {
   if((j-weight[i])< 0)
    v[i][j]=v[i-1][j];
   else
    v[i][j]=max(v[i-1][j],v[i-1][j-weight[i]]+value[i]);
  }
 }
 printf("\n \t      ");
 for(i=0;i<= W;i++)
  printf("%2d  ",i);

 printf("\n-----------------------------------------------------------------------------");

 for(i=0;i<=no;i++)
 {
  printf("\n w%d=%2d v%d=%2d |",i,weight[i],i,value[i]);
  for(j=0;j<= W;j++)
   printf("%2d  ",v[i][j]);

 }
 printf("\n-----------------------------------------------------------------------------");
 printf("\n Maximum value carry by knapsack is:%2d",v[no][W]);
 printf("\n-----------------------------------------------------------------------------");
}

int max(int a,int b)
{
 return (a >b)?a:b;
}

void backtracking()
{

 int j1,i;
 j1=W;
 printf("\nIncluded Object \t weight \t value");
 printf("\n-----------------------------------------------------------------------------");
 for(i=no;i >=0;i--)
 {

  if(v[i][j1]!=v[i-1][j1] && (v[i][j1]==v[i-1][j1-weight[i]]+value[i]))
  {
   printf("\n%2d \t\t\t  %2d   \t\t %2d",i,weight[i],value[i]);
   j1=j1-weight[i];
  }

 }


}


OUTPUT



Enter number of Object you want:5

 Enter weight and values in ascending order of values

 Enter Weight and Value for Object 1:1 1

 Enter Weight and Value for Object 2:2 6

 Enter Weight and Value for Object 3:5 18

 Enter Weight and Value for Object 4:6 22

 Enter Weight and Value for Object 5:7 28

Enter knapsack Capacity:11

                0   1   2   3   4    5    6    7    8    9   10  11
--------------------------------------------------------------------------
 w0= 0 v0= 0  | 0   0   0   0   0    0    0    0   0    0    0    0
 w1= 1 v1= 1  | 0   1   1   1   1    1    1    1   1    1    1    1
 w2= 2 v2= 6  | 0   1   6   7   7    7    7    7   7    7    7    7
 w3= 5 v3=18  | 0   1   6   7   7   18   19   24  25   25   25   25
 w4= 6 v4=22  | 0   1   6   7   7   18   22   24  28   29   29   40
 w5= 7 v5=28  | 0   1   6   7   7   18   22   28  29   34   35   40
--------------------------------------------------------------------------
 Maximum value carry by knapsack is:40
--------------------------------------------------------------------------
Included Object          weight          value
--------------------------------------------------------------------------
 4                           6              22
 3                           5              18

Post a Comment

0Comments

Post a Comment (0)