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

सी ++ में सभी नोड्स को जोड़ने के लिए हम गैर-अतिव्यापी किनारों को रखने के तरीकों की संख्या की गणना करने के लिए कार्यक्रम

मान लीजिए कि हमारे पास एक संख्या n है जो गोलाकार रूप से रखे गए नोड्स की संख्या का प्रतिनिधित्व करती है। हमें n / 2 किनारों को रखने के तरीकों की संख्या का पता लगाना होगा जैसे कि प्रत्येक नोड एक किनारे से जुड़ा हुआ है, और यह कि किनारे एक दूसरे के साथ प्रतिच्छेद नहीं करते हैं। अगर उत्तर बहुत बड़ा है तो परिणाम मोड 10^9 + 7 लौटाएं।

इसलिए, यदि इनपुट n =4 जैसा है, तो आउटपुट 2 होगा, जैसा कि हम उन्हें नीचे की तरह समूहित कर सकते हैं -

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

  • आकार की dp सरणी परिभाषित करें (n/2 + 1)

  • डीपी [0]:=1, डीपी [1]:=1

  • मी :=10^9+7

  • इनिशियलाइज़ i :=2 के लिए, जब i <=n / 2, अपडेट करें (i को 1 से बढ़ाएँ), करें -

    • उच्च:=मैं

    • डीपी [i] :=0

    • इनिशियलाइज़ j :=1 के लिए, जब j <=high / 2, अपडेट करें (j को 1 से बढ़ाएँ), करें -

      • dp[i] :=(dp[i] + (2 * dp[j - 1] * dp[high - j])) mod m

    • यदि उच्च% 2 शून्य नहीं है, तो -

      • dp[i] :=(dp[i] + (dp[(high - 1) / 2] * dp[(high - 1) / 2]) मॉड m

    • डीपी [i]:=डीपी [i] मॉड एम

  • वापसी डीपी [एन / 2]

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
int solve(int n) {
   vector<long long> dp(n / 2 + 1);
   dp[0] = 1;
   dp[1] = 1;
   int m = 1000000007;
   for (int i = 2; i <= n / 2; i++) {
      int high = i;
      dp[i] = 0;
      for (int j = 1; j <= high / 2; j++) {
         dp[i] = (dp[i] + (2 * dp[j - 1] * dp[high - j])) % m;
      }
      if (high % 2) dp[i] = (dp[i] + (dp[(high - 1) / 2] * dp[(high - 1) / 2])) % m;
         dp[i] %= m;
   }
   return dp[n / 2];
}
main(){
   int n = 4;
   cout << solve(n);
}

इनपुट

4

आउटपुट

2

  1. सी ++ प्रोग्राम डोडेकैगन की संख्या गिनने के लिए जिसे हम आकार डी बना सकते हैं

    मान लीजिए कि हमारे पास एक संख्या d है। विचार करें कि अनंत संख्या में वर्गाकार टाइलें हैं और भुजाओं की लंबाई के साथ नियमित त्रिकोणीय टाइलें हैं। हमें यह पता लगाना है कि इन टाइलों का उपयोग करके हम कितने तरीकों से नियमित डोडेकागन (12-पक्षीय बहुभुज) बना सकते हैं। यदि उत्तर बहुत बड़ा है, तो परिणाम मोड 99

  1. C++ प्रोग्राम में N × 3 ग्रिड को पेंट करने के तरीकों की संख्या

    मान लीजिए कि हमारे पास एक ग्रिड है जिसका आकार n x 3 है और हम ग्रिड के प्रत्येक सेल को तीन रंगों में से एक के साथ पेंट करना चाहते हैं। यहां जिन रंगों का उपयोग किया जाएगा वे हैं लाल, पीला और हरा। अब एक बाधा है, कि दो आसन्न कोशिकाओं का रंग समान नहीं है। हमारे पास ग्रिड की पंक्तियों की संख्या है। अंत म

  1. पायथन में n पासे फेंकने के तरीकों की संख्या गिनने का कार्यक्रम

    मान लीजिए कि हमारे पास एक संख्या n, फलकों की संख्या और कुल मान है, तो हमें कुल प्राप्त करने के लिए n पासों को प्रत्येक फलकों के साथ फेंकने के तरीकों की संख्या ज्ञात करनी होगी। अगर उत्तर बहुत बड़ा मॉड है तो परिणाम 10**9 + 7. इसलिए, यदि इनपुट n =2 चेहरे =6 कुल =8 जैसा है, तो आउटपुट 5 होगा, क्योंकि 2