0/1 knapsack using dynamic programming
SOURCE CODE:
#include<stdio.h>
int sum=0,w[10],p[10],i,m,n;
int max(int a,int b){
return (a>b)?a:b;
}
void knapsack(){
int x[10]={0},v[100][100],i,j,sum;
for(i=1;i<=n;i++)
for(j=0;j<=m;j++){
if(j >= w[i])
v[i][j]=max(v[i-1][j],v[i-1][j-w[i]]+p[i]);
else
v[i][j]=v[i-1][j];
}
for(i=n,j=m;i>0&&j>0;i--){
if(v[i][j]!=v[i-1][j]){
x[i]=1;
j=j-w[i];
}
}
printf("The Optimal solution is :\n");
for(i=1;i<=n;i++){
if(x[i]==1){
printf("X%d=1\t",i);
sum=sum+p[i];
}
else
printf("X%d=0\t",i);
}
printf("\nTotal profit = %d",sum);
}
int main()
{
printf("ENTER THE NUMBER OF ITEMS: ");
scanf("%d",&n);
printf("ENTER THE WEIGHTS AND PROFITS OF THE ITEMS:\n");
for(i=1;i<=n;i++)
scanf("%d%d",&w[i],&p[i]);
printf("ENTER THE CAPACITY OF KNAPSACK: ");
scanf("%d",&m);
knapsack();
return 0;
}
OUTPUT:
ENTER THE NUMBER OF ITEMS: 3
ENTER THE WEIGHTS AND PROFITS OF THE ITEMS:
20 100
10 50
30 150
ENTER THE CAPACITY OF KNAPSACK: 50
The Optimal solution is :
X1=1 X2=0 X3=1
Total profit = 250
#include<stdio.h>
int sum=0,w[10],p[10],i,m,n;
int max(int a,int b){
return (a>b)?a:b;
}
void knapsack(){
int x[10]={0},v[100][100],i,j,sum;
for(i=1;i<=n;i++)
for(j=0;j<=m;j++){
if(j >= w[i])
v[i][j]=max(v[i-1][j],v[i-1][j-w[i]]+p[i]);
else
v[i][j]=v[i-1][j];
}
for(i=n,j=m;i>0&&j>0;i--){
if(v[i][j]!=v[i-1][j]){
x[i]=1;
j=j-w[i];
}
}
printf("The Optimal solution is :\n");
for(i=1;i<=n;i++){
if(x[i]==1){
printf("X%d=1\t",i);
sum=sum+p[i];
}
else
printf("X%d=0\t",i);
}
printf("\nTotal profit = %d",sum);
}
int main()
{
printf("ENTER THE NUMBER OF ITEMS: ");
scanf("%d",&n);
printf("ENTER THE WEIGHTS AND PROFITS OF THE ITEMS:\n");
for(i=1;i<=n;i++)
scanf("%d%d",&w[i],&p[i]);
printf("ENTER THE CAPACITY OF KNAPSACK: ");
scanf("%d",&m);
knapsack();
return 0;
}
OUTPUT:
ENTER THE NUMBER OF ITEMS: 3
ENTER THE WEIGHTS AND PROFITS OF THE ITEMS:
20 100
10 50
30 150
ENTER THE CAPACITY OF KNAPSACK: 50
The Optimal solution is :
X1=1 X2=0 X3=1
Total profit = 250
Comments
Post a Comment