syed11027

0-1 KNAPSACK

Jun 28th, 2019
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<conio.h>
  3. int sum=0;
  4. int max(int a,int b)
  5. {
  6. if(a>b)
  7. return a;
  8. else
  9. return b;
  10. }
  11. void knapsack(int m,int n,int w[],int p[])
  12. {
  13. int v[100][200],x[10],i,j;
  14. for(j=0;j<=m;j++)
  15. v[0][j]=0;
  16. for(i=1;i<=n;i++)
  17. {
  18. for(j=0;j<=m;j++)
  19. {
  20. if(j>=w[i])
  21. v[i][j]=max(v[i-1][j],v[i-1][j-w[i]]+p[i]);
  22. else
  23. v[i][j]=v[i-1][j];
  24. }
  25. }
  26. for(i=1;i<=n;i++)
  27. x[i]=0;
  28. i=n;
  29. j=m;
  30. while(i>0 && j>0)
  31. {
  32. if(v[i][j]!=v[i-1][j])
  33. {
  34. x[i]=1;
  35. j=j-w[i];
  36. }
  37. i--;
  38. }
  39. printf("\nTHE OPTIMAL SET OF WEIGHTS IS:\n");
  40. for(i=1;i<=n;i++)
  41. {
  42. if(x[i]==1)
  43. {
  44. printf("X%d=1\t",i);
  45. sum=sum+p[i];
  46. }
  47. else
  48. printf("x%d=0\t",i);
  49. }
  50. printf("\nTotal profit = %d",sum);
  51. }
  52. void main()
  53. {
  54. int w[10],p[10],i,m,n;
  55. printf("\t0/1 KNAPSACK PROBLEM\n\n");
  56. printf("ENTER THE NUMBER OF ITEMS: ");
  57. scanf("%d",&n);
  58. printf("ENTER THE WEIGHTS OF THE ITEMS:\n");
  59. for(i=1;i<=n;i++)
  60. scanf("%d",&w[i]);
  61. printf("ENTER THE PROFITS OF THE ITEMS:\n");
  62. for(i=1;i<=n;i++)
  63. scanf("%d",&p[i]);
  64. printf("ENTER THE CAPACITY OF KNAPSACK: ");
  65. scanf("%d",&m);
  66. knapsack(m,n,w,p);
  67. getch();
  68. }
  69. /*
  70. 0/1 KNAPSACK PROBLEM
  71.  
  72. ENTER THE NUMBER OF ITEMS: 5
  73. ENTER THE WEIGHTS OF THE ITEMS:
  74. 2
  75. 3
  76. 4
  77. 5
  78. 6
  79. ENTER THE PROFITS OF THE ITEMS:
  80. 3
  81. 4
  82. 5
  83. 6
  84. 7
  85. ENTER THE CAPACITY OF KNAPSACK: 8
  86.  
  87. THE OPTIMAL SET OF WEIGHTS IS:
  88. x1=0 X2=1 x3=0 X4=1 x5=0
  89. Total profit = 10
  90. */
Add Comment
Please, Sign In to add comment