#include <stdio.h>
#include <conio.h>
#define MAX 20
float final_profit;
int w[MAX];
int p[MAX];
int n,m;
int temp[MAX],x[MAX];
float final_wt;
float Bound_Calculation(int,int,int);
void BackTracking(int,int,int);
void main()
int i;
clrscr();
printf("\n-------------------------------------------------------");
printf("\n-------------------------------------------------------");
scanf("%d",&n);
printf("\n-------------------------------------------------------");
for(i=1;i<=n;i++)
scanf("%3d %3d",&w[i],&p[i]);
getch();
printf("\n-------------------------------------------------------");
printf("\n Weight\tProfit");
printf("\n-------------------------------------------------------");
for(i=1;i<=n;i++)
printf("\n %d \t %d",w[i],p[i]);
BackTracking(1,0,0);
printf("\n-------------------------------------------------------");
printf("\n-------------------------------------------------------");
for(i=1;i<=n;i++)
if(x[i]==1)
printf("\n%d",i);
printf("\n-------------------------------------------------------");
getch();
int ub,c,i;
ub=cp;
c=cw;
for(i=k+1;i<=n;i++)
c=c+w[i];
if(c < m)
ub=ub+p[i];
else
return (ub+(1-(c-m)/w[i])*p[i]);
return ub;
int new_k,new_cp,new_cw,j;
if(cw+w[k]<=m)
temp[k]=1;
if(k < n)
new_k=k+1;
new_cp=cp+p[k];
new_cw=cw+w[k];
BackTracking(new_k,new_cp,new_cw);
if((new_cp>final_profit)&&(k==n))
final_profit=new_cp;
final_wt=new_cw;
for(j=1;j<=k;j++)
x[j]=temp[j];
}
}
if(Bound_Calculation(cp,cw,k)>=final_profit)
temp[k]=0;
if(k < n)
BackTracking(k+1,cp,cw);
if((cp>final_profit)&&(k==n))
final_profit=cp;
final_wt=cw;
for(j=1;j<=n;j++)
x[j]=temp[j];
}
Enter number of Objects you want:4
-------------------------------------------------------
Enter Weight and value for object1:5 6
-------------------------------------------------------
Weight Profit
-------------------------------------------------------
5 6
6 8
7 12
8 15
-------------------------------------------------------
Following Objects are included:
-------------------------------------------------------
2
3
-------------------------------------------------------
Final Weight:13.00
Final Profit:20.00
Greedy technique
#include<stdio.h>
#include<time.h>
#include<conio.h>
void knapsack(float capacity, int n, float weight[], float profit[])
{
float x[20], totalprofit,y;
int i,j;
y=capacity;
totalprofit=0;
for(i=0;i < n;i++)
x[i]=0.0;
for(i=0;i < n;i++)
{
if(weight[i] > y)
break;
else
{
x[i]=1.0;
totalprofit=totalprofit+profit[i];
y=y-weight[i];
}
}
if(i < n)
x[i]=y/weight[i];
totalprofit=totalprofit+(x[i]*profit[i]);
printf("The selected elements are:-\n ");
for(i=0;i < n;i++)
if(x[i]==1.0)
printf("\nProfit is %f with weight %f ", profit[i], weigh
t[i]);
else if(x[i] > 0.0)
printf("\n%f part of Profit %f with weight %f", x[i], pro
fit[i], weight[i]);
printf("\nTotal profit for %d objects with capacity %f = %f\n\n", n, capa
city,totalprofit);
}
void main()
{
float weight[20],profit[20],ratio[20], t1,t2,t3;
int n;
time_t start,stop;
float capacity;
clrscr();
int i,j;
printf("Enter number of objects: ");
scanf("%d", &n);
printf("\nEnter the capacity of knapsack: ");
scanf("%f", &capacity);
for(i=0;i < n;i++)
{
printf("\nEnter %d(th) profit: ", (i+1));
scanf("%f", &profit[i]);
printf("Enter %d(th) weight: ", (i+1));
scanf("%f", &weight[i]);
ratio[i]=profit[i]/weight[i];
}
start=time(NULL);
for(i=0;i < n;i++)
for(j=0;j < n;j++)
{
if(ratio[i] > ratio[j])
{
t1=ratio[i];
ratio[i]=ratio[j];
ratio[j]=t1;
t2=weight[i];
weight[i]=weight[j];
weight[j]=t2;
t3=profit[i];
profit[i]=profit[j];
profit[j]=t3;
}
}
knapsack(capacity,n,weight,profit);
stop=time(NULL);
printf("\nKnapsack = %f\n", difftime(stop,start));
getch();
}
Enter number of objects: 5
Knapsack = 0.000000
// C++ program to solve knapsack problem using
Branch and bound
return profit_bound;
}
return maxProfit;
}
return 0;
}
Output :
Maximum possible profit = 235