You are on page 1of 4

Knapsack Using Dynamic Programming

#include<stdio.h>
void main()
{
int i,j,n,w[10],v[10],cap,val[10][10];
clrscr();
printf("\n\t KNAPSACK PROBLEM");
printf("\n\t ****************");
printf("\n\t Enter the no.of Terms : ");
scanf("%d",&n);
printf("\n\t Enter the weight of the item : ");
for(i=1;i<=n;i++)
{
scanf("%d",&w[i]);
}
printf("\n\t Enter the value of the item : ");
for(i=1;i<=n;i++)
{
scanf("%d",&v[i]);
}
printf("\n\t\t Enter the capacity:");
scanf("%d",&cap);
for(i=0;i<=n;i++)
{
for(j=0;j<=cap;j++)
{
if((i==0)||(j==0))
{
val[i][j] = 0;
}
else
{
if((j-w[i])>=0)
{
if(val[i-1][j]>(v[i]+val[i-1][j-w[i]]))

{
val[i][j] = val[i-1][j];
}
else
{
val[i][j] = v[i]+val[i-1][j-w[i]];
}
}
else
{
val[i][j] = val[i-1][j];
}
}
}
}
printf("\n\n\n\t\t THE RESULT FOR KNAPSACK PROBLEM ");
printf("\n\t\t =============================== \n\n\n\t\t");
for(i=0;i<=cap;i++)
{
printf(" \t %d",i);
}
printf("\n");
for(i=0;i<=n;i++)
{
printf("\n\t");
printf("\t%d",i);
for(j=0;j<=cap;j++)
{
printf("\t %d",val[i][j]);
}
}
printf("\n\n\n\n\t\t THE VALUE IS : %d \n\n\n",val[n][cap]);
if(val[n][cap]>val[n-1][cap])
{
printf("\n\n THE FILLED ITEM IS %d \t WEIGHT IS %d ",n,w[i-1]);

}
else
{
printf("\n\n THE FILLED ITEM IS %d \t WEIGHT IS %d ",n,w[i]);
}
if(val[n-1][cap-2]>val[n-2][cap-2])
{
printf("\n\n THE FILLED ITEM IS %d \t WEIGHT IS %d ",n-2,w[i-2]);
}
else
{
printf("\n\n THE FILLED ITEM IS %d \t WEIGHT IS %d ",n-2,w[i-3]);
}
if(val[n-2][cap-3]>val[n-3][cap-3])
{
printf("\n THE FILLED ITEM IS %d \t WEIGHT IS %d ",n-2,w[i-3]);
}
else
{
printf("\n THE FILLED ITEM IS %d \t WEIGHT IS %d ",n-3,w[i-4]);
}
getch();
}

Output:

You might also like