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

C++ में औसत का सबसे बड़ा योग

मान लीजिए कि हम संख्या A की एक पंक्ति को अधिक से अधिक K आसन्न समूहों में विभाजित करते हैं, तो हम स्कोर को प्रत्येक समूह के औसत के योग के रूप में सेट करेंगे। हमें यह पता लगाना होगा कि हम सबसे बड़ा स्कोर क्या हासिल कर सकते हैं। मान लीजिए ए =[9,1,2,3,9] और के 3 है, तो परिणाम 20 होगा, ऐसा इसलिए है, क्योंकि ए को [9], [1, 2, 3] में विभाजित करना सबसे अच्छा विकल्प है। [9]। तो उत्तर 9 + (1 + 2 + 3) / 3 + 9 =20 है। हम A को [9, 1], [2], [3, 9],

में भी विभाजित कर सकते थे।

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

  • मैट्रिक्स डीपी परिभाषित करें
  • एक पुनरावर्ती विधि को परिभाषित करें हल (), यह सरणी A, अनुक्रमणिका और k लेगा
  • यदि अनुक्रमणिका>=A का आकार है, तो 0 लौटाएं
  • अगर k 0 है, तो -100000 वापस करें
  • अगर dp[index, k] -1 नहीं है, तो dp[index, k]
  • लौटाएं
  • रिट:=-इन्फ और योग:=0
  • आई के लिए रेंज इंडेक्स में ए - 1 के आकार के लिए
    • योग :=योग + ए[i]
    • ret :=अधिकतम रिट और योग/(i ​​- अनुक्रमणिका + 1) + हल करें (A, i + 1, k – 1)
  • dp[index, k] :=ret और return सेट करें।
  • मुख्य विधि से, निम्न कार्य करें -
  • n :=A का आकार
  • dp:=एक मैट्रिक्स n x (K + 1), इसे - 1 से भरें
  • रिटर्न सॉल्व (ए, 0, के)

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   vector < vector <double> > dp;
   double solve(vector <int>& A, int idx, int k){
      if(idx >= A.size()) return 0;
      if(!k) return -100000;
      if(dp[idx][k] != -1) return dp[idx][k];
      double ret = INT_MIN;
      double sum = 0;
      for(int i = idx; i < A.size(); i++){
         sum += A[i];
         ret = max(sum / (i - idx + 1) + solve(A, i + 1, k - 1), ret);
      }
      return dp[idx][k] = ret;
   }
   double largestSumOfAverages(vector<int>& A, int K) {
      int n = A.size();
      dp = vector < vector <double> > (n, vector <double>(K + 1, -1));
      return solve(A, 0, K);
   }
};
main(){
   vector<int> v = {9,1,2,3,9};
   Solution ob;
   cout << (ob.largestSumOfAverages(v, 3));
}

इनपुट

[9,1,2,3,9]
3

आउटपुट

20

  1. C++ में k से अधिक योग वाले सबसे बड़े उप-सरणी

    इस ट्यूटोरियल में, हम एक प्रोग्राम लिखने जा रहे हैं जिसमें सबसे बड़े सबअरे का योग k से अधिक होता है। आइए समस्या को हल करने के लिए चरणों को देखें। सरणी प्रारंभ करें। सरणी पर पुनरावृति करें और अनुक्रमणिका के साथ वेक्टर में प्रत्येक अनुक्रमणिका पर योग संग्रहीत करें। उपरोक्त राशियों को योग और अनुक्रमण

  1. C++ में n के सभी भाजक में अंकों का सबसे बड़ा योग ज्ञात कीजिए

    इस समस्या में, हमें एक पूर्णांक n दिया गया है। हमारा कार्य n के सभी भाजक में अंकों का सबसे बड़ा योग ज्ञात करना है। समस्या का विवरण: यहाँ, हम उस संख्या n का भाजक ज्ञात करेंगे जिसके अंकों का योग सबसे बड़ा है। समस्या को समझने के लिए एक उदाहरण लेते हैं, इनपुट: 18 आउटपुट: 9 स्पष्टीकरण: 18 के स

  1. सी ++ में एक पेड़ में सबसे बड़ा सबट्री योग खोजें

    इस समस्या में हमें एक बाइनरी ट्री दिया जाता है। हमारा काम पेड़ में सबसे बड़ा सबट्री योग खोजना है। समस्या का विवरण: बाइनरी ट्री में सकारात्मक और साथ ही नकारात्मक मान होते हैं। और हमें उस सबट्री को खोजने की जरूरत है जिसमें नोड्स की अधिकतम राशि हो। समस्या को समझने के लिए एक उदाहरण लेते हैं,