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

C++ में कार्ड्स से प्राप्त अधिकतम पॉइंट्स


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

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

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

  • दो ऐरे pre1 और prev2 परिभाषित करें और उन्हें v से इनिशियलाइज़ करें

  • ret := 0

  • n := v का आकार

  • i := 1 से शुरू करें, जब i < n, i बढ़ाते हुए, करें -

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

  • i := n - 2 से शुरू करें, जब i >= 0, i घटाते हुए, करें -

    • pre2[i] := pre2[i] + pre2[i + 1]

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

    • pre1[n - 1] लौटाएं

  • i := k - 1

  • ret := pre1[i]

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

  • j := n - 1

  • जब i >= 0, करें -

    • ret := max(ret, pre1[i] + pre2[j])

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

  • ret := max(ret, pre2[n - k])

  • ret लौटाएं

उदाहरण

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

#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 शतरंज बोर्ड पर रखे जा सकने वाले अधिकतम बिशप की संख्या C++ में N*N शतरंज बोर्ड पर रखे जा सकने वाले अधिकतम बिशप की संख्या

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

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

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

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

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