Advertisement
Rakibul_Ahasan

0-1 Knapsack

Dec 2nd, 2019
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.46 KB | None | 0 0
  1. /// আমাকে ব্যাগের সাইজ m দেয়া আছে, আর n সংখ্যক জিনিসের দাম ও ওজন দেয়া আছে,
  2. /// আমাকে এমন ভাবে জিনিস নিতে হবে,যাতে করে তাদের ওজন m এর বেশি না হয় আর দাম সবচেয়ে বেশি হয়।
  3.  
  4. #include<bits/stdc++.h>
  5. using namespace std;
  6.  
  7. int w[2006];
  8. int val[2006];
  9.  
  10. /// এখানে একটা জিনিস একাধিকবার নেয়া যাবে না। এজন্য 2d array লাগবে।
  11. int profit[2004][2004];
  12.  
  13. int knap(int cap, int n)
  14. {
  15.  
  16. /// i তম জিনিস পর্যন্ত j ওজন পর্যন্ত বেস্ট solution কোনটা |
  17. ///  মানে মোট কত কেজি জিনিস তার ব্যাগে নিতে পারব।
  18.     for(int i= 0; i<=n; i++)
  19.     {
  20.         for(int j= 0; j<=cap; j++)
  21.         {
  22.  
  23. /// প্রথম  j = 0 মানে কোন element নেয়া হয় নি।তাই ব্যাগেও কিছু নাই।
  24. /// এখানে  i = 0, তার মানে এখনো কোন জিনিস নেয়া হয় নি, তাই ব্যাগে আছে ০ কেজি জিনিস।
  25.             if(i == 0 || j== 0)
  26.                 profit[i][j]= 0;
  27.  
  28.             else if(w[i-1] <= j)
  29.                 profit[i][j]= max(val[i-1]+profit[i-1][j-w[i-1]], profit[i-1][j]);
  30.  
  31.             else
  32.                 profit[i][j]= profit[i-1][j];
  33.         }
  34.     }
  35.  
  36.     return profit[n][cap];
  37. }
  38.  
  39.  
  40. /// প্রথমে ধরব ব্যাগের ধারণক্ষমতা ১ কেজি। তখন সবচেয়ে বেশি লাভ কত, তা বের করব।
  41. /// এই মান ব্যবহার করে বের করব, ব্যাগের ধারণক্ষমতা ২ কেজি হলে সবচেয়ে বেশি লাভ কত হবে।
  42. /// এই মান ব্যাবহার করে বের করব, ব্যাগের ধারণক্ষমতা ৩ কেজি হলে সবচেয়ে বেশি লাভ কত হবে...
  43. /// এভাবে একসময় ১ম element এর জন্য(আমাদের উদাহরণে স্বর্ণ) ব্যাগের ধারণক্ষমতা ১০ কেজি হলে সবচেয়ে বেশি লাভ কত হবে,তা বের হবে।
  44. /// তারপর ২য় element নিয়ে কাজ করব।
  45. /// এবার আবারো ব্যাগের ধারণক্ষমতা ১ কেজি হতে ১০ কেজি পর্যন্ত যাব,
  46. /// আর চেক করব তখন এই ২য় element টা নিলে লাভ বেশি, নাকি না নিলে লাভ বেশি।
  47. int main()
  48. {
  49.  
  50. /// ব্যাগের ওজন দেয়া আছে s এ।
  51. /// আর কয়টা জিনিস আছে, তা আছে n এ,
  52.     int s,n;
  53.     cin>>s>>n;
  54.  
  55. /// weight আছে weight[] array তে
  56. /// জিনিসগুলোর দাম আছে values[] array তে
  57.     for(int i=0; i<n; i++)
  58.     {
  59.         cin>>w[i]>>val[i];
  60.     }
  61.  
  62.     cout<< knap(s,n) <<endl;
  63.     return 0;
  64. }
  65.  
  66. /// https://sites.google.com/site/programinggconcept/0-1-knapsack
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement