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

C++ में Partition Equal Subset Sum


मान लीजिए हमारे पास केवल धनात्मक संख्याओं वाली एक गैर-खाली सरणी है, हमें यह ढूंढना है कि क्या सरणी को दो उपसमुच्चयों (subsets) में विभाजित किया जा सकता है जैसे कि दोनों उपसमुच्चयों में तत्वों का योग समान हो। इसलिए यदि इनपुट [1,5,11,5] जैसा है, तो आउटपुट true होगा। क्योंकि इस सरणी को [1, 5, 5] और [11] के रूप में विभाजित किया जा सकता है।

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

  • n := सरणी का आकार
  • sum := 0
  • i := 0 से n - 1 तक
    • sum := sum + nums[i]
  • यदि sum विषम है, तो false लौटाएं
  • sum := sum / 2
  • sum + 1 आकार की एक सरणी dp बनाएं
  • dp[0] := true
  • i को 0 से n - 1 तक की रेंज में
    • x := nums[i]
    • j := sum से नीचे से j - x तक
      • dp[j] := dp[j] या dp[j - x], जो 0 नहीं है
  • dp[sum] लौटाएं

उदाहरण (C++)

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

#include <bits/stdc++.h> using namespace std; class Solution { public:    bool canPartition(vector<int>& nums) {       int n = nums.size();       int sum = 0;       for(int i =0;i<n;i++)sum+=nums[i];       if(sum&1)return false;       sum/=2;       vector <bool> dp(sum+1);       dp[0] = true;       for(int i =0;i<n;i++){          int x = nums[i];          for(int j =sum;j-x>=0;j--){             dp[j]=dp[j] || dp[j-x];          }       }       return dp[sum];    } }; main(){    Solution ob;    vector<int> v = {1,5,11,5};    cout << ob.canPartition(v); }

इनपुट

[1,5,11,5]

आउटपुट

1

  1. C++ में समान ट्री विभाजन C++ में समान ट्री विभाजन

    मान लीजिए हमारे पास n नोड्स वाला एक बाइनरी ट्री है, हमारा कार्य यह जांचना है कि क्या मूल ट्री पर ठीक एक किनारा हटाकर ट्री को दो ट्री में विभाजित करना संभव है जिनके मानों का योग समान हो। उदाहरण के लिए, यदि इनपुट दिए गए चित्र के अनुसार है, तो आउटपुट true होगा। हल करने की विधि हम पोस्ट-ऑर्डर ट्रैवर्सल

  1. - C++ में ऐरे का अधिकतम औसत योग पार्टीशन

    समस्या कथन एक ऐरे दिया गया है, हम संख्याओं की एक पंक्ति A को अधिकतम K आसन्न (गैर-खाली) समूहों में पार्टीशन करते हैं, फिर स्कोर प्रत्येक समूह के औसत का योग होता है। अधिकतम स्कोर क्या हो सकता है? उदाहरण यदि इनपुट ऐरे है {9, 2, 5, 3, 10} तो हम ऐरे को निम्नानुसार पार्टीशन कर सकते हैं: {9} {2, 5, 3} और

  1. - C++ में एलिक्वॉट योग (Aliquot Sum)

    यहां हम देखेंगे कि एलिक्वॉट योग क्या है? n का एलिक्वॉट योग n को छोड़कर n के सभी पूर्ण गुणनखंडों का योग है। उदाहरण के लिए, यदि संख्या 20 है, तो पूर्ण गुणनखंड (1, 2, 4, 5, 10) हैं। तो एलिक्वॉट योग 22 है। एक दिलचस्प तथ्य यह है कि, यदि किसी संख्या का एलिक्वॉट योग संख्या स्वयं है, तो वह संख्या एक पूर्ण