Heim > Backend-Entwicklung > C++ > Hauptteil

C++-Programm zum Ermitteln der Mindestpunktzahl, die zum Erreichen einer G-Punktzahl erforderlich ist

WBOY
Freigeben: 2023-09-06 21:25:06
nach vorne
845 Leute haben es durchsucht

C++-Programm zum Ermitteln der Mindestpunktzahl, die zum Erreichen einer G-Punktzahl erforderlich ist

Angenommen, wir haben zwei Arrays p und c, jedes Array hat D Elemente und es gibt eine weitere Zahl G. Bedenken Sie, dass bei einem Programmierwettbewerb jede Frage anhand ihres Schwierigkeitsgrads bewertet wird. Die Punktzahl der Frage p[i] beträgt 100i. Diese p[1] + ... + p[D]-Probleme sind allesamt Probleme im Wettbewerb. Benutzer auf Programmierwebsites haben einen numerischen Gesamtscore. Der total_score des Benutzers ist die Summe der folgenden zwei Elemente.

  • Grundpunktzahl: Die Summe der Punktzahlen aller gelösten Probleme

  • Belohnung: Wenn der Benutzer alle Probleme mit einer Punktzahl von 100i löst, wird zusätzlich zur Basispunktzahl eine perfekte Belohnung c[ i] wird erhalten.

Amal ist neu im Wettbewerb und hat noch keine Probleme gelöst. Sein Ziel ist es, eine Gesamtnote von G oder mehr zu erreichen. Wir müssen herausfinden, wie viele Probleme er mindestens lösen muss, um dieses Ziel zu erreichen.

Wenn die Eingabe also G = 500; P = [3, 5]; C = [500, 800] ist, beträgt die Ausgabe 3

Schritte

Um dieses Problem zu lösen, befolgen wir die folgenden Schritte:

Beispiel

Sehen wir uns zum besseren Verständnis die Implementierung unten an: -

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
Nach dem Login kopieren

Input

#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;
}
Nach dem Login kopieren

Output

500, { 3, 5 }, { 500, 800 }
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonC++-Programm zum Ermitteln der Mindestpunktzahl, die zum Erreichen einer G-Punktzahl erforderlich ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage