मान लीजिए कि हमारे पास सम संख्या में n लोग हैं जो एक वृत्त के चारों ओर खड़े हैं और प्रत्येक व्यक्ति किसी और से हाथ मिलाता है, जिससे कुल n / 2 हैंडशेक होंगे। हमें यह पता लगाना होगा कि ये हैंडशेक कितने तरीकों से हो सकते हैं ताकि कोई भी हैंडशेक पार न हो। उत्तर बहुत बड़े हो सकते हैं इसलिए उत्तर मोड 10^9 + 7 लौटाएं।
इसलिए, यदि इनपुट n =2 जैसा है, तो आउटपुट 1
. होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
मी :=10^9 + 7
-
आकार की dp सरणी परिभाषित करें (n+1)
-
डीपी [0] :=1
-
इनिशियलाइज़ करने के लिए i:=0, जब i <=n, अपडेट i :=i + 2, करें -
-
इनिशियलाइज़ j :=0 के लिए, जब j <=i-2, j :=j + 2 को अपडेट करें, −
करें-
डीपी [i]:=डीपी [i] + (डीपी [जे] मॉड एम * डीपी [i - 2 - जे] मॉड एम)
-
डीपी [i]:=डीपी [i] मॉड एम
-
-
-
वापसी डीपी [एन] मॉड एम
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h> using namespace std; const int m = 1e9+7; typedef long long int lli; class Solution { public: int numberOfWays(int n) { vector <lli> dp(n+1); dp[0] = 1; for(int i = 0; i <= n; i+=2 ){ for(int j =0 ; j <= i-2; j+=2){ dp[i] += (dp[j]%m * dp[i-2-j]%m)%m; dp[i]%=m; } } return dp[n]%m; } }; main(){ Solution ob; cout << (ob.numberOfWays(2)); }
इनपुट
2
आउटपुट
1