Write program to implement Dynamic Programming algorithm for the 0/1 Knapsack problem.

#include<stdio.h>
#include<conio.h>
int max(int a, int b) { return (a > b)? a : b; }
int knapSack(int W, int wt[], int pt[], int n){
	if (n == 0 || W == 0)
		 return 0;
	if (wt[n-1] > W)
		 return knapSack(W, wt, pt, n-1);
	else return max( pt[n-1] + knapSack(W-wt[n-1], wt, pt, n-1),
							  knapSack(W, wt, pt, n-1) );
}

void main(){
	int pt[20],wt[20];
	int W;
	int n,i,j;
	int max_profit;
	int knapSacktems[20];
	int v[20][20];
	clrscr();
	printf("\nENTER THE TOTAL NUMBER OF ITEMS TO INCLUDE\n");
	scanf("%d",&n);

	printf("\nENTER ALL ITEMS WITH ITS WEIGHT AND PROFIT\n");
	for(i=0;i<n;i++){
		scanf("%d%d",&wt[i],&pt[i]);
		knapSacktems[i]=0;
	}
	printf("\nENTER THE MAXIMUM WEIGHT OF THE BAG\n");
	scanf("%d",&W);
	printf("Knapsack Tabulation\n\n");
	printf("p|w\t");
	for(j=0;j<=W;j++){
		printf("%d\t",j);
	}
	printf("\n=====================================================\n");

	for(i=0;i<n;i++){
		printf("%d|%d\t",pt[i],wt[i]);
		for(j=0;j<=W;j++){
			v[i][j]=knapSack(j, wt, pt, i+1);
			printf("%d\t",v[i][j]);
		}
		printf("\n");
	}
	printf("Max profit = %d\n\n",knapSack(W, wt, pt, n));
	printf("Items are selected as shown below\n");
	max_profit=v[n-1][W];
	for(;max_profit>0;){
		for(i=0;i<n;i++){
			for(j=0;j<=W;j++){
				if(v[i][j]==max_profit && max_profit>0){
					knapSacktems[i]=1;
					max_profit=max_profit-pt[i];
					i=-1;
					break;
				}
			}
		}
	}
	for(i=0;i<n;i++){
		printf("K %d = %d\n",i+1,knapSacktems[i]);
	}
	getch();
}