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

C++ प्रोग्राम कम से कम यह पता लगाने के लिए कि G राशि का स्कोर प्राप्त करने के लिए उसे कितना स्कोर चाहिए

मान लीजिए कि हमारे पास दो सरणियाँ हैं p और c दोनों में D तत्वों की संख्या है, और दूसरी संख्या G है। एक कोडिंग प्रतियोगिता में विचार करें, प्रत्येक समस्या का कठिनाई के आधार पर अपना स्कोर होता है। समस्या p[i] का स्कोर 100i है। ये p[1] + ... + p[D] समस्याएं प्रतियोगिता में मौजूद सभी समस्याएं हैं। कोडिंग साइट में एक उपयोगकर्ता के पास एक नंबर Total_score है। किसी उपयोगकर्ता का Total_score निम्नलिखित दो तत्वों का योग होता है।

  • आधार स्कोर :सभी हल की गई समस्याओं के स्कोर का योग

  • बोनस :जब कोई उपयोगकर्ता 100i के स्कोर के साथ सभी समस्याओं को हल करता है, तो वह आधार स्कोर के अलावा सही बोनस c[i] अर्जित करता है।

अमल प्रतियोगिता में नया है और उसने कोई समस्या हल नहीं की है। उसका उद्देश्य G या अधिक अंक का कुल अंक प्राप्त करना है। हमें कम से कम यह पता लगाना होगा कि इस उद्देश्य के लिए उसे कितनी समस्याओं को हल करने की आवश्यकता है।

इसलिए, यदि इनपुट G =500 जैसा है; पी =[3, 5]; सी =[500, 800], तो आउटपुट 3 होगा

कदम

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

D := size of p
mi := 10000
for initialize i := 0, when i < 1 << D, update (increase i by 1), do:
sum := 0
count := 0
at := 0
an array to store 10 bits b, initialize from bit value of i
for initialize j := 0, when j < D, update (increase j by 1), do:
   if jth bit in b is 1, then:
      count := p[j]
      sum := sum + ((j + 1) * 100 * p[j] + c[j]
   Otherwise
      at := j
if sum < G, then:
   d := (G - sum + (at + 1) * 100 - 1) / ((at + 1) * 100)
   if d <= p[at], then:
      sum := sum + (at + 1)
      count := count + d
if sum >= G, then:
   mi := minimum of mi and count
return mi

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
int solve(int G, vector<int> p, vector<int> c){
   int D = p.size();
   int mi = 10000;
   for (int i = 0; i < 1 << D; i++){
      int sum = 0;
      int count = 0;
      int at = 0;
      bitset<10> b(i);
      for (int j = 0; j < D; j++){
         if (b.test(j)){
            count += p.at(j);
            sum += (j + 1) * 100 * p.at(j) + c.at(j);
         } else {
            at = j;
         }
      }
      if (sum < G){
         int d = (G - sum + (at + 1) * 100 - 1) / ((at + 1) * 100);
         if (d <= p.at(at)){
            sum += (at + 1) * 100 * d;
            count += d;
         }
      }
      if (sum >= G) {
         mi = min(mi, count);
      }
   }
   return mi;
}
int main() {
   int G = 500;
   vector<int> P = { 3, 5 };
   vector<int> C = { 500, 800 };
   cout << solve(G, P, C) << endl;
}

इनपुट

500, { 3, 5 }, { 500, 800 }

आउटपुट

3

  1. सी ++ प्रोग्राम एक सबएरे को नकारने के बाद प्राप्त होने वाले विशिष्ट मूल्यों की संख्या को खोजने के लिए

    मान लीजिए कि हमारे पास n तत्वों के साथ एक सरणी A है। हम दी गई संख्याओं के किसी उपसमुच्चय का चयन करते हैं और इन संख्याओं को नकारते हैं। हमें प्राप्त होने वाले सरणी में अधिकतम विभिन्न मानों को खोजना होगा। इसलिए, यदि इनपुट ए =[1, 1, 2, 2] जैसा है, तो आउटपुट 4 होगा, क्योंकि हम सरणी बनाने के लिए पहली और

  1. C++ प्रोग्राम दी गई शर्तों के लिए कम से कम कितने ऑपरेशनों की आवश्यकता है, यह गिनने के लिए

    मान लीजिए कि हमारे पास एन तत्वों के साथ एक सरणी ए है। प्रत्येक ऑपरेशन में, हम एक तत्व चुनते हैं और इसे 1 से बढ़ाते या घटाते हैं। हमें कम से कम यह पता लगाना होगा कि निम्नलिखित शर्तों को पूरा करने के लिए कितने ऑपरेशन की आवश्यकता है - 1 से n तक के प्रत्येक i के लिए, 1 से ith पद तक के पदों का योग 0 न

  1. C++ प्रोग्राम स्कोर की अधिकतम राशि का पता लगाने के लिए जिसे ग्राफ़ से घटाया जा सकता है

    मान लीजिए, एक भारित, अप्रत्यक्ष ग्राफ है जिसमें n कोने और m किनारे हैं। ग्राफ़ के स्कोर को ग्राफ़ में सभी किनारों के वज़न के योग के रूप में परिभाषित किया गया है। किनारे के वजन नकारात्मक हो सकते हैं, और यदि उन्हें हटा दिया जाता है तो ग्राफ का स्कोर बढ़ जाता है। हमें क्या करना है, हमें ग्राफ को कनेक्ट