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

अधिकतम अंक जो आप C++ में कार्ड से प्राप्त कर सकते हैं

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

इसलिए, यदि इनपुट कार्डपॉइंट्स =[1,2,3,4,5,6,1], के =3 जैसा है, तो आउटपुट 12 होगा, क्योंकि प्रारंभिक चरण के बाद, हमारा स्कोर हमेशा 1 होगा। अब , सबसे पहले सबसे सही कार्ड चुनने से कुल स्कोर अधिकतम होगा। 1 + 6 + 5 =12 का अंतिम स्कोर देते हुए, तीन कार्डों को दाईं ओर ले जाना इष्टतम रणनीति है।

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

  • दो सरणियों को परिभाषित करें pre1 और prev2 और उन्हें v के साथ प्रारंभ करें

  • रिट:=0

  • n:=वी का आकार

  • इनिशियलाइज़ करने के लिए मैं :=1, जब i

    • pre1[i] :=pre1[i] + pre1[i - 1]

  • इनिशियलाइज़ करने के लिए i :=n - 2, जब i>=0, अपडेट करें (i से 1 घटाएं), −

    करें
    • pre2[i] :=pre2[i] + pre2[i + 1]

  • यदि k>=n, तो −

    • वापसी पूर्व1[n - 1]

  • मैं :=के - 1

  • रिट :=प्री1[i]

  • (i 1 से घटाएं)

  • जे:=एन - 1

  • जबकि मैं>=0, करते हैं -

    • ret :=अधिकतम रिट और (pre1[i] + pre2[j])

    • i और j को 1 से घटाएं

  • रिट :=अधिकतम रिट और प्री2[एन-के]

  • वापसी रिट

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int maxScore(vector<int>& v, int k) {
      vector<int> pre1(v.begin(), v.end());
      vector<int> pre2(v.begin(), v.end());
      int ret = 0;
      int n = v.size();
      for (int i = 1; i < n; i++) {
         pre1[i] += pre1[i - 1];
      }
      for (int i = n - 2; i >= 0; i--) {
         pre2[i] += pre2[i + 1];
      }
      if (k >= n) {
         return pre1[n - 1];
      }
      int i = k - 1;
      ret = pre1[i];
      i--;
      int j = n - 1;
      while (i >= 0) {
         ret = max(ret, pre1[i] + pre2[j]);
         i--;
         j--;
      }
      ret = max(ret, pre2[n - k]);
      return ret;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,3,4,5,6,1};
   cout << (ob.maxScore(v, 3));
}

इनपुट

{1,2,3,4,5,6,1}

आउटपुट

12

  1. अधिकतम बिशप जिन्हें C++ में N*N शतरंज की बिसात पर रखा जा सकता है

    हमें एक इनपुट एन दिया गया है जो शतरंज की बिसात के आकार को दर्शाता है। यहाँ कार्य N के किसी भी मान का पता लगाना है, NXN शतरंज की बिसात पर कितने बिशप रखे जा सकते हैं ताकि कोई भी दो बिशप एक दूसरे पर हमला न कर सकें। आइए उदाहरणों से समझते हैं। इनपुट -एन=2 आउटपुट - अधिकतम बिशप जिन्हें N*N शतरंज की बिस

  1. C++ में दिए गए बिंदुओं को समाहित करने वाले खंडों की अधिकतम संख्या

    दिए गए बिंदुओं को समाहित करने वाले अधिकतम खंडों को खोजने का कार्य दिया गया है। एक सरणी को देखते हुए a1[] आकार n1 के साथ और दो पूर्णांक A और B दिए गए हैं। दिए गए एरे से a1[],n1 लाइन सेगमेंट को शुरुआती और अंतिम बिंदुओं के साथ a1[i] – A और a1[i] + क्रमशः बनाया जा सकता है। एक अन्य सरणी a2[] को n2 अंको

  1. अधिकतम दर्पण जो C++ में प्रकाश को नीचे से दाएं स्थानांतरित कर सकते हैं

    हमें एक वर्ग मैट्रिक्स दिया गया है जिसमें केवल 0 और 1 हैं। 0 एक खाली खाली जगह का प्रतिनिधित्व करता है और 1 का मतलब बाधा है। हमें ऐसे कई दर्पण खोजने होंगे, जिनमें अटेम्प्टी सेल इस प्रकार रखे जा सकें कि ये दर्पण नीचे से दाईं ओर प्रकाश स्थानांतरित कर सकें। यह तब संभव है, जब मिरर को इंडेक्स [i,j] पर रखा