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

C++ में बहुभुज का न्यूनतम स्कोर त्रिभुजन

मान लीजिए कि हमारे पास एक मान एन है, एक उत्तल एन-पक्षीय बहुभुज पर विचार करें जिसमें ए [0], ए [i], ..., ए [एन -1] लेबल वाले शिखर दक्षिणावर्त क्रम में हैं। अब मान लीजिए कि हम बहुभुज को N-2 त्रिभुजों में त्रिभुज करना चाहते हैं। प्रत्येक त्रिभुज के लिए, उस त्रिभुज का मान शीर्षों के लेबल का गुणनफल होता है, और त्रिभुज का कुल स्कोर त्रिभुज में सभी N-2 त्रिभुजों पर इन मानों का योग होगा। हमें सबसे छोटा संभव कुल स्कोर ज्ञात करना है जिसे हम बहुभुज के कुछ त्रिभुज के साथ प्राप्त कर सकते हैं। तो अगर इनपुट [1,2,3] है, तो आउटपुट 6 होगा, क्योंकि बहुभुज पहले से ही त्रिभुज है, और एकमात्र त्रिभुज का स्कोर 6 है।

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

  • 50 x 50 आकार का मैट्रिक्स डीपी बनाएं, इसे 0 से भरें

  • n :=दिए गए सरणी का आकार

  • l के लिए n से n तक की श्रेणी में

    • i के लिए :=0, j :=l-1, जब j

      • k के लिए i + 1 से j – 1 की श्रेणी में

        • अगर dp[i, j] =0, तो

          • dp[i, j] :=न्यूनतम inf और dp[i, k] + dp[k, j] + A[i] * A[j] * A[k]

        • अन्यथा dp[i, j] :=न्यूनतम dp[i,j] और dp[i, k] + dp[k, j] + A[i] * A[j] * A[k]

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

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
   class Solution {
   public:
   int minScoreTriangulation(vector<int>& A) {
      lli dp[50][50];
      for(int i = 0; i < 50; i++){
         for(int j = 0; j < 50; j++){
            dp[i][j] = 0;
         }
      }
      int n = A.size();
      for(int l = 3; l <= n; l++){
         for(int i = 0, j = l - 1; j < n;i++, j++){
            for(int k = i + 1; k < j; k++){
               dp[i][j] = min(dp[i][j] == 0?INT_MAX : dp[i][j],
               dp[i][k] + dp[k][j] + A[i] * A[k] * A[j]);
            }
         }
      }
      return dp[0][n - 1];
   }
};
main(){
   vector<int> v1 = {1,2,3};
   Solution ob;
   cout << (ob.minScoreTriangulation(v1));
}

इनपुट

[1,2,3]

आउटपुट

6

  1. सी++ में न्यूनतम स्ट्रिंग

    मान लीजिए कि हमारे पास समान लंबाई के दो तार s और t हैं, और दोनों छोटे अक्षरों में हैं। विचार करें कि हमने पहले s को किसी भी क्रम में पुनर्व्यवस्थित किया है, फिर s को t में बदलने के लिए आवश्यक न्यूनतम परिवर्तनों की गणना करें। इसलिए, यदि इनपुट s =eccynue, t =science जैसा है, तो आउटपुट 2 होगा जैसे कि ह

  1. सी++ में टीवी शो

    मान लीजिए कि हमारे पास टीवी शो की एक सूची है, और अवधि की एक और सूची है, और एक पूर्णांक k, यहां दिखाता है [i] और अवधि [i] ith द्वारा देखे गए नाम और अवधि को दर्शाता है व्यक्ति, हमें k सबसे अधिक देखे जाने वाले शो की कुल अवधि ज्ञात करनी होगी। तो, यदि इनपुट शो की तरह है:[कैसल प्ले, फेयरी टेल सीरीज़, कैसल

  1. C++ में जॉब शेड्यूल की न्यूनतम कठिनाई

    मान लीजिए कि हम d दिनों में कार्यों की एक सूची शेड्यूल करना चाहते हैं। कार्य निर्भर हैं इसलिए i-th कार्य पर काम करने के लिए, हमें सभी कार्यों को पूरा करना होगा जहां 0 <=j