#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
#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