0-1 बस्ता समस्या में, वस्तुओं का एक सेट दिया जाता है, प्रत्येक का एक वजन और एक मूल्य होता है। हमें संग्रह में शामिल करने के लिए प्रत्येक आइटम की संख्या निर्धारित करने की आवश्यकता है ताकि कुल वजन दी गई सीमा से कम या उसके बराबर हो और कुल मूल्य जितना संभव हो उतना बड़ा हो।
इनपुट
मान =[10, 20, 30, 40, 60, 70]वजन =[1, 2, 3, 6, 7, 4] int w=7
आउटपुट
नैपसेक मान है:100
एल्गोरिदम
प्रारंभ इनपुट:वजन और मूल्य के साथ प्रत्येक आइटम का सेट knapsack क्षमता सेट करें आइटम्स की संख्या =sizeof(values) / sizeof(values[0]) Knapsack (मान (सरणी v में संग्रहीत), वज़न (सरणी में संग्रहीत) w), अलग-अलग मदों की संख्या (n), नैपसैक क्षमता W) यदि (w <0) यदि कोई आइटम शेष नहीं है या क्षमता 0 हो जाती है तो वापस लौटें 0 वर्तमान आइटम n को knapSack (v[n]) में शामिल करें और शेष वस्तुओं के लिए पुनरावर्ती करें ( n - 1) घटी हुई क्षमता के साथ (W - w[n]) knapSack से वर्तमान आइटम n को बाहर निकालें और शेष वस्तुओं के लिए पुनरावर्ती करें (n - 1) वर्तमान आइटम को शामिल या बहिष्कृत करके हमें प्राप्त होने वाला अधिकतम मान लौटाएं।उदाहरण कोड
#include#include namespace std का उपयोग करके;int knapSack(int v[], int w[], int n, int W) {if (W <0) रिटर्न INT_MIN; अगर (एन <0 || डब्ल्यू ==0) वापसी 0; int in =v[n] + knapSack(v, w, n-1, W - w[n]); int पूर्व =knapSack (वी, डब्ल्यू, एन - 1, डब्ल्यू); वापसी अधिकतम (में, पूर्व);} इंट मुख्य () {इंट वी [] ={10, 20, 30, 40, 60, 70}; इंट डब्ल्यू [] ={ 1, 2, 3, 6, 7, 4}; इंट डब्ल्यू =7; int n =sizeof(v) / sizeof(v[0]); cout <<"नैपसेक मान है" < आउटपुट
नैपसेक मान 100 है