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

C++ . में फट गुब्बारे


मान लीजिए कि हमारे पास n गुब्बारे हैं, ये 0 से n-1 तक अनुक्रमित हैं। यहां प्रत्येक गुब्बारे को एक संख्या के साथ चित्रित किया जाता है जिसे एक सरणी द्वारा दर्शाया जाता है जिसे अंक कहा जाता है। हमें सारे गुब्बारे फोड़ने हैं। यदि हम गुब्बारा फोड़ते हैं तो हमें अंक [i - 1] * अंक [i] * अंक [i + 1] सिक्कों की संख्या प्राप्त होगी। फटने के बाद, i – 1 और i + 1 फिर आसन्न हो जाते हैं। हमें गुब्बारों को बुद्धिमानी से फोड़कर इकट्ठा करने के लिए अधिकतम सिक्के खोजने होंगे।

तो अगर इनपुट [3,1,5,7] की तरह है, तो परिणाम 148 होगा। शुरू में सरणी [3,1,5,7] की तरह है, फिर 1 को फोड़ने के बाद हमें 3 * 1 * मिलेगा। 5 =15, फिर सरणी [3,5,7] है, फिर 5 फट, तो हमें मिलेगा (3 * 5 * 7) =105, फिर सरणी [3,7] की तरह है, फिर 3 फट, तो हम मिलेगा (1*3*7) =21, अंत में ऐरे [7] है, इसलिए फोड़ने के बाद, हमें 7 मिलेगा, इसलिए कुल 15 + 105 + 21 + 7 =148 है।

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

  • n :=आकार का

  • अगर (n गैर-शून्य है) गलत है, तो,

    • वापसी 0

  • क्रम n x n के एक 2D सरणी dp को परिभाषित करें

  • शुरू करने के लिए l :=n-1, जब l>=0, l को 1 से घटाएं -

    • r :=l को इनिशियलाइज़ करने के लिए, जब r

      • i :=l को इनिशियलाइज़ करने के लिए, जब i <=r, i को 1 से बढ़ाएँ -

        • y :=dp[i + 1, r] अगर i + 1

        • z :=a[l - 1] अगर l - 1>=0 अन्यथा 1

        • w :=a[r + 1] यदि r + 1

        • x :=dp[l, i - 1] अगर i - 1> =0, अन्यथा 0 + y + (z * w * a[i])

        • dp[l, r] :=अधिकतम dp[l, r] और x

  • वापसी डीपी [0, एन -1]

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int maxCoins(vector<int>& a) {
      int n = a.size();
      if(!n)return 0;
      vector < vector <int>> dp(n,vector <int> (n));
      for(int l = n-1;l>=0;l--){
         for(int r=l;r<n;r++){
            for(int i =l;i<=r;i++){
               dp[l][r] = max(dp[l][r],(i-1>=0?dp[l][i-1]:0) +(i+1<n?dp[i+1][r]:0)+((l-1>=0?a[l-1]:1 )*(r+1<n?a[r+1]:1)*a[i]));
            }
         }
      }
      return dp[0][n-1];
   }
};
main(){
   Solution ob;
   vector<int> v = {3,1,5,7};
   cout << (ob.maxCoins(v));
}

इनपुट

[3,1,5,7]

आउटपुट

148

  1. स्विच स्टेटमेंट C++

    C++ में स्विच स्टेटमेंट का उपयोग कैसे करें सशर्त बयान सभी प्रोग्रामिंग भाषाओं की एक सामान्य विशेषता है। इन कथनों का उपयोग किसी प्रोग्राम के प्रवाह को नियंत्रित करने और यह निर्दिष्ट करने के लिए किया जाता है कि कोड के विशिष्ट ब्लॉक कब निष्पादित किए जाने चाहिए। C++ में उपयोग किए जाने वाले मुख्य कंडीश

  1. C++ में मितव्ययी संख्या

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया जाता है। हमारा कार्य यह जाँचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या - एक संख्या जिसके अंकों की संख्या दी गई संख्या के अभाज्य गुणनखंड में अंकों की संख्या से अधिक है। उदाहरण − 625, संख्या 625 का अभाज्

  1. सी++ पेंटाटोप नंबर

    पास्कल के त्रिभुज में एक पंचकोण संख्या को पाँचवीं संख्या के रूप में वर्णित किया गया है। अब, जैसा कि आप जानते हैं, यह पांचवीं संख्या है, तो इसका मतलब है कि हमारे पास पास्कल के त्रिकोण में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है। पास्कल त्रिभुज की