62 lines
1.5 KiB
C++
62 lines
1.5 KiB
C++
|
#include<stdio.h>
|
||
|
#include<conio.h>
|
||
|
int w[10],p[10],v[10][10],n,i,j,cap,x[10]= {0};
|
||
|
int max(int i,int j)
|
||
|
{
|
||
|
return ((i>j)?i:j);
|
||
|
}
|
||
|
int knap(int i,int j)
|
||
|
{
|
||
|
int value;
|
||
|
if(v[i][j]<0)
|
||
|
{
|
||
|
if(j<w[i])
|
||
|
value=knap(i-1,j);
|
||
|
else
|
||
|
value=max(knap(i-1,j),p[i]+knap(i-1,j-w[i]));
|
||
|
v[i][j]=value;
|
||
|
}
|
||
|
return(v[i][j]);
|
||
|
}
|
||
|
void main()
|
||
|
{
|
||
|
int profit,count=0;
|
||
|
clrscr();
|
||
|
printf("\nEnter the number of elements\n");
|
||
|
scanf("%d",&n);
|
||
|
printf("Enter the profit and weights of the elements\n");
|
||
|
for (i=1; i<=n; i++)
|
||
|
{
|
||
|
printf("For item no %d\n",i);
|
||
|
scanf("%d%d",&p[i],&w[i]);
|
||
|
}
|
||
|
printf("\nEnter the capacity \n");
|
||
|
scanf("%d",&cap);
|
||
|
for (i=0; i<=n; i++)
|
||
|
for (j=0; j<=cap; j++)
|
||
|
if((i==0)||(j==0))
|
||
|
v[i][j]=0;
|
||
|
else
|
||
|
v[i][j]=-1;
|
||
|
profit=knap(n,cap);
|
||
|
i=n;
|
||
|
j=cap;
|
||
|
while(j!=0&&i!=0)
|
||
|
{
|
||
|
if(v[i][j]!=v[i-1][j])
|
||
|
{
|
||
|
x[i]=1;
|
||
|
j=j-w[i];
|
||
|
i--;
|
||
|
}
|
||
|
else
|
||
|
i--;
|
||
|
}
|
||
|
printf("Items included are\n");
|
||
|
printf("Sl.no\tweight\tprofit\n");
|
||
|
for (i=1; i<=n; i++)
|
||
|
if(x[i])
|
||
|
printf("%d\t%d\t%d\n",++count,w[i],p[i]);
|
||
|
printf("Total profit = %d\n",profit);
|
||
|
getch();
|
||
|
}
|