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

दो समुच्चयों का अधिकतम योग ज्ञात करने का कार्यक्रम जहाँ योग C++ में बराबर हों

मान लीजिए कि हमारे पास संख्याओं की एक सूची है, जिसे अंक कहा जाता है, अब दो सेट खोजें क्योंकि उनके योग समान और अधिकतम हैं, तो योग मान ज्ञात करें।

इसलिए, यदि इनपुट संख्या =[2, 5, 4, 6] की तरह है, तो आउटपुट 6 होगा, क्योंकि सेट [2, 4] और [6] हैं।

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

  • योग :=0
  • प्रत्येक संख्या के लिए i अंकों में, करें
    • योग :=योग + मैं
  • n :=अंकों का आकार
  • एक 2डी सरणी डीपी आकार (n + 1) x (2 * योग + 5) परिभाषित करें और -1 से भरें
  • dp[0, sum] :=0
  • इनिशियलाइज़ i :=1 के लिए, जब i <=n, अपडेट करें (i को 1 से बढ़ाएँ), −
      करें
    • x :=nums[i - 1]
    • इनिशियलाइज़ j :=0 के लिए, जब j <2 * sum + 5, अपडेट करें (j को 1 से बढ़ाएँ), करें -
      • यदि j - x>=0 और dp[i - 1, j - x] -1 के बराबर नहीं है, तो ^−
        • dp[i, j] :=अधिकतम dp[i, j] और (dp[i - 1, j - x] + x)
      • यदि j + x <(2 * योग + 5) और dp[i - 1, j + x] -1 के बराबर नहीं है, तो −
        • dp[i, j] :=अधिकतम dp[i, j] और (dp[i - 1, j + x])
      • dp[i, j] :=अधिकतम dp[i, j] और dp[i-1, j]
  • रिटर्न डीपी[एन, योग]

उदाहरण (C++)

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int solve(vector<int>& nums) {
      int sum = 0;
      for (int i : nums) sum += i;
      int n = nums.size();
      vector<vector<int> > dp(n + 1, vector<int>(2 * sum + 5, -1));
      dp[0][sum] = 0;
      for (int i = 1; i <= n; i++) {
         int x = nums[i - 1];
         for (int j = 0; j < 2 * sum + 5; j++) {
            if (j - x >= 0 && dp[i - 1][j - x] != -1) {
               dp[i][j] = max(dp[i][j], dp[i - 1][j - x] + x);
            }
            if (j + x < 2 * sum + 5 && dp[i - 1][j + x] != -1) {
               dp[i][j] = max(dp[i][j], dp[i - 1][j + x]);
            }
            dp[i][j] = max(dp[i][j], dp[i - 1][j]);
         }
      }
      return dp[n][sum];
   }
};
int solve(vector<int>& nums) {
   return (new Solution())->solve(nums);
}
main(){
   vector<int> v = {2, 5, 4, 6};
   cout << solve(v);
}

इनपुट

{2, 5, 4, 6}

आउटपुट

6

  1. तत्वों के माध्यिका को खोजने के लिए C++ प्रोग्राम जहां तत्वों को 2 अलग-अलग सरणियों में संग्रहीत किया जाता है

    हम तत्वों के माध्यिका को खोजने के लिए एक C++ प्रोग्राम पर विचार करेंगे जहां तत्वों को 2 अलग-अलग सरणियों में संग्रहीत किया जाता है। एल्गोरिदम Begin    Function Median() has Two arrays a1[], a2[] and n = numbers of elements of the array as arguments:    Initialize i and j by 0, and

  1. दो नंबर जोड़ने के लिए C++ प्रोग्राम

    जोड़ एक बुनियादी अंकगणितीय ऑपरेशन है। दो संख्याओं को जोड़ने का कार्यक्रम दो संख्याओं का योग करता है और उनके योग को स्क्रीन पर प्रिंट करता है। एक प्रोग्राम जो दो संख्याओं के योग को प्रदर्शित करता है, वह इस प्रकार दिया गया है - उदाहरण #include <iostream> using namespace std; int main() {  

  1. पायथन में दो गैर-अतिव्यापी उप-सूचियों का अधिकतम योग खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक और दो मान x और y कहते हैं, हमें दो गैर-अतिव्यापी उप-सूचियों का अधिकतम योग संख्याओं में खोजना होगा जिनकी लंबाई x और y है। इसलिए, यदि इनपुट अंकों की तरह है =[3, 2, 10, -2, 7, 6] x =3 y =1, तो आउटपुट 22 होगा, लंबाई 3 के साथ सबलिस्ट के रूप में हम [