Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में हाउस रॉबर II


मान लीजिए, आप एक पेशेवर चोर हैं। और आप एक सड़क के किनारे घरों को लूटने की योजना बना रहे हैं। प्रत्येक घर में एक निश्चित मात्रा में पैसा जमा है। सभी घर एक वृत्त में व्यवस्थित हैं। इसका मतलब है कि पहला घर आखिरी घर का पड़ोसी है। हमें ध्यान रखना होगा कि आसन्न घरों में सुरक्षा प्रणाली जुड़ी हुई है और यह स्वचालित रूप से पुलिस से संपर्क करेगी यदि एक ही रात में दो आसन्न घरों में सेंध लगाई गई थी। तो यदि हमारे पास प्रत्येक घर के पैसे की मात्रा को दर्शाने वाले इंटीजर्स की एक सूची है, तो पुलिस को सतर्क किए बिना एक रात में आप जितना अधिकतम पैसा लूट सकते हैं उसे निर्धारित करें। तो यदि ऐरे [1,2,3,1] है, तो आउटपुट 4 होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे −

  • हम solve() नामक एक मॉड्यूल का उपयोग कर रहे हैं, जो ऐरे, स्टार्ट और एंड लेगा, जो नीचे की तरह कार्य करेगा −
  • ans := nums[start]
  • डायनामिक प्रोग्रामिंग के लिए एक टेबल बनाएं, जिसका नाम dp है, और आकार nums के आकार के समान है।
  • dp[start] := nums[start]
  • i := start + 1 से end तक
    • last := dp[i – 1]
    • lastToLast := 0 जब i – 2, अन्यथा dp[i – 2]
    • dp[i] := nums[i] + lastToLast और last का अधिकतम
    • ans := dp[i] और ans का अधिकतम
  • ans लौटाएं
  • लूट इस तरह की जाती है −
  • n := nums का आकार
  • यदि n शून्य है, तो 0 लौटाएं
  • यदि n = 1, तो nums[0] लौटाएं
  • solve(nums, 0, n - 2), solve(nums, 1, n – 1) का अधिकतम लौटाएं

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें −

उदाहरण

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int solve(vector <int>& nums, int start, int end){       int ans = nums[start];       vector <int> dp(nums.size());       dp[start] = nums[start];       for(int i = start + 1; i <= end; i++){          int last = dp[i - 1];          int lastToLast = i - 2 < start? 0 : dp[i - 2];          dp[i] = max(nums[i] + lastToLast, last);          ans = max(dp[i], ans);       }       return ans;    }    int rob(vector<int>& nums) {       int n = nums.size();       if(!n)return 0;       if(n == 1)return nums[0];       return max(solve(nums, 0, n - 2), solve(nums, 1, n - 1));    } }; main(){    vector<int> v = {1,2,3,5};    Solution ob;    cout << ob.rob(v); }

इनपुट

[1,2,3,5]

आउटपुट

7

  1. C++ में डायगोनल ट्रैवर्स II C++ में डायगोनल ट्रैवर्स II

    मान लीजिए हमारे पास nums नामक लिस्ट ऑफ लिस्ट है, हमें nums के सभी एलिमेंट्स को डायगोनल क्रम में दिखाना है।इसलिए, यदि इनपुट हैतो आउटपुट होगा [1,6,2,8,7,3,9,4,12,10,5,13,11,14,15,16]इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:एक ऐरे ret परिभाषित करेंएक 2D ऐरे v परिभाषित करेंi := 0 से शुरू करें,

  1. C++ में प्रोसेस मारें C++ में प्रोसेस मारें

    मान लीजिए हमारे पास n प्रोसेस हैं, यहां प्रत्येक प्रोसेस की एक अद्वितीय आईडी होती है जिसे PID या प्रोसेस आईडी कहा जाता है और इसका PPID (पैरेंट प्रोसेस आईडी) भी होता है। प्रत्येक प्रोसेस का केवल एक पैरेंट प्रोसेस होता है, लेकिन उसके एक या अधिक चाइल्ड प्रोसेस हो सकते हैं। यह एक ट्री संरचना की तरह है।

  1. C++ में हाउस रॉबर III C++ में हाउस रॉबर III

    मान लीजिए एक चोर ने अपनी चोरी के लिए एक नई जगह ढूंढ ली है। इस क्षेत्र में केवल एक प्रवेश द्वार है, प्रवेश द्वार को रूट कहा जाता है। रूट के अलावा, प्रत्येक घर का एक और केवल एक पैरेंट घर होता है। एक दौरे के बाद, स्मार्ट चोर को लगा कि इस जगह के सभी घर एक बाइनरी ट्री बनाते हैं। और यदि दो सीधे-लिंक्ड घरो