मान लीजिए कि हमारे पास दो सूचियाँ हैं जिन्हें वज़न और मान कहा जाता है जो समान लंबाई की हैं और एक अन्य संख्या जिसे क्षमता k कहा जाता है। यहाँ वज़न [i] और मान [i] ith आइटम का वज़न और मान दिखाता है। अब, हम अधिक से अधिक k क्षमता भार ले सकते हैं, और यह कि हम प्रत्येक आइटम की अधिकतम एक प्रति ही ले सकते हैं, हमें वह अधिकतम राशि ज्ञात करनी होगी जो हम प्राप्त कर सकते हैं।
इसलिए, यदि इनपुट वज़न =[2, 3, 4], मान =[2, 6, 4], क्षमता =6 जैसा है, तो आउटपुट 8
होगा।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- n:=वजन का आकार
- dp:=आकार क्षमता x n का एक मैट्रिक्स, और 0 से भरें
- मैं के लिए 0 से n की सीमा में, करते हैं
- जे के लिए 0 से क्षमता तक, करें
- यदि मैं 0 के समान है या j, 0 के समान है, तो
- dp[i, j]:=0
- अन्यथा जब भार[i-1] <=j, तब
- dp[i,j] =अधिकतम (dp[i-1, j-weights[i - 1]] + value[i-1]) और (dp[i-1, j])
- अन्यथा,
- dp[i, j]:=dp[i-1, j]
- यदि मैं 0 के समान है या j, 0 के समान है, तो
- जे के लिए 0 से क्षमता तक, करें
- रिटर्न डीपी[एन, क्षमता]
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def solve(self, weights, values, capacity): n=len(weights) dp=[[0 for i in range(capacity+1)] for _ in range(n+1)] for i in range(n+1): for j in range(capacity+1): if i==0 or j==0: dp[i][j]=0 elif weights[i-1]<=j: dp[i][j]=max(dp[i-1][j-weights[i-1]]+values[i-1],dp[i-1][j]) else: dp[i][j]=dp[i-1][j] return dp[n][capacity] ob = Solution() weights = [2, 3, 4] values = [2, 6, 4] capacity = 6 print(ob.solve(weights, values, capacity))
इनपुट
[2, 3, 4], [2, 6, 4], 6
आउटपुट
8