Skip to main content

0/1 knapsack problem using Dynamic programming in C

#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

Comments

Post a Comment

Popular posts from this blog

MVT (Multiprogramming Variable Task) in C Programming

#include #include void main() { int i,os_m,nPage,total,pg[25]; clrscr(); printf("\nEnter total memory size:"); scanf("%d",&total); printf("\nEnter memory for OS:"); scanf("%d",&os_m); printf("\nEnter no. of pages:"); scanf("%d",&nPage); for(i=0;i =pg[i]) { printf("\n Allocate page %d",i+1); total=total-pg[i]; } else printf("\n page %d is not allocated due to insufficient memory.",i+1); } printf("\n External Fragmentation is:%d",total); getch(); } OUTPUT Enter total memory size:1024 Enter memory for OS:256 Enter no. of pages:4 Enter size of page[1]:128 Enter size of page[2]:512 Enter size of page[3]:64 Enter size of page[4]:512 Allocate page 1 Allocate page 2 Allocate page 3 page 4 is not allocated due to insufficient memory. External Fragmentation is:64

First Come First Serve (FCFS) Page replacement algorithm in C Programming

#include #include int fsize; int frm[15]; void display(); void main() { int pg[100],nPage,i,j,pf=0,top=-1,temp,flag=0; clrscr(); printf("\n Enter frame size:"); scanf("%d",&fsize); printf("\n Enter number of pages:"); scanf("%d",&nPage); for(i=0;i OUTPUT Enter frame size:3 Enter number of pages:12 Enter page[1]:1 Enter page[2]:2 Enter page[3]:3 Enter page[4]:4 Enter page[5]:1 Enter page[6]:2 Enter page[7]:5 Enter page[8]:1 Enter page[9]:2 Enter page[10]:3 Enter page[11]:4 Enter page[12]:5 page | Frame content -------------------------------------- 1 | 1 -1 -1 2 | 1 2 -1 3 | 1 2 3 4 | 4 2 3 1 | 4 1 3 2 | 4 1 2 5 | 5 1 2 1 | 5 1 2 2 | 5 1 2 3 | 5 3 2 4 | 5 3 4 5 | 5 3 4 ---------------------------...

Deadlock Prevention using Banker’s Algorithm in C Programming

#include #include void main() { int allocated[15][15],max[15][15],need[15][15],avail[15],tres[15],work[15],flag[15]; int pno,rno,i,j,prc,count,t,total; count=0; clrscr(); printf("\n Enter number of process:"); scanf("%d",&pno); printf("\n Enter number of resources:"); scanf("%d",&rno); for(i=1;i OUTPUT Enter number of process:5 Enter number of resources:3 Enter total numbers of each resources:10 5 7 Enter Max resources for each process: for process 1:7 5 3 for process 2:3 2 2 for process 3:9 0 2 for process 4:2 2 2 for process 5:4 3 3 Enter allocated resources for each process: for process 1:0 1 0 for process 2:3 0 2 for process 3:3 0 2 for process 4:2 1 1 for process 5:0 0 2 available resources: 2 3 0 Allocated matrix Max need 0 1 0| 7 5 3| 7 4 3 3 0 2| 3 2 2| 0 2 0 3 0 2| 9 0 2| 6 0 0 2 1 1| ...