Angenommen, ein Telekommunikationsbetreiber führt einen Dienst namens „All-in-One“ ein, der Zugang zu n OTT-Inhaltsanbietern zu einem Festpreis von 100.000 USD bietet. Wenn wir nun OTT-Plattformen direkt abonnieren müssen, müssen wir für jede Plattform separate Gebühren zahlen. Wir müssen nicht alle Plattformen für alle Monate abonnieren, sondern müssen einen Weg finden, ihre Dienste kostengünstig zu nutzen. Wir benötigen den Startmonat des Dienstes für Plattform i, der im Array start_month angegeben ist, und den Endmonat, der im Array end_month angegeben ist. Der für das Abonnement der Plattform erforderliche Preis ist im Array „price[i]“ angegeben. Wir müssen den Mindestbetrag herausfinden, den wir zahlen müssen, um alle Plattformen gemäß unseren Anforderungen zu abonnieren.
Wenn die Eingabe also etwa n = 3, k = 10, Startmonat = {1, 2, 1}, Endmonat = {3, 3, 2}, Preis = {5, 7, 8} ist, dann ist die Ausgabe wird 30 sein
Wir müssen den Dienst für 3 Monate abonnieren.
Für den ersten Monat müssen wir die Plattformen 1 und 3 abonnieren. Kostet jeweils 5 $ + 8 = 13 $, aber mit dem „All-in-One“-Paket kostet es nur 10 USD. Ebenso benötigen wir im zweiten Monat alle drei, für einen Gesamtpreis von 20 $. Aber wir haben für diese drei 10 Dollar bezahlt. Im dritten Monat belaufen sich die Gesamtkosten des Abonnements auf 12 US-Dollar, wir zahlen jedoch nur 10 US-Dollar.
Daher betragen die Gesamtkosten 10 + 10 + 10 = 30.
Um dieses Problem zu lösen, folgen wir den folgenden Schritten -
Define an array pairArray for initialize i := 0, when i < n, update (increase i by 1), do: insert pair(start_month[i], price[i]) at the end of pairArray insert pair(end_month[i] + 1, -price[i]) at the end of pairArray sort the array pairArray pre := 0 c := 0 res := 0 for each element p in pairArray, do: day := first element of p - pre res := res + minimum of (k, c) c := c + second element of p pre := first element of p return res
Sehen wir uns zum besseren Verständnis die folgende Implementierung an -
#include <bits/stdc++.h> using namespace std; vector<vector<int>> G; vector<int> res; int solve(int n, int k, int start_month[], int end_month[], int price[]){ vector<pair<int, int>> pairArray; for(int i = 0; i < n; i++) { pairArray.push_back(make_pair(start_month[i], price[i])); pairArray.push_back(make_pair(end_month[i] + 1, -price[i])); } sort(pairArray.begin(), pairArray.end()); int pre = 0; int c = 0; int res = 0; for(auto p : pairArray) { int day = p.first - pre; res += min(k, c) * day; c += p.second; pre = p.first; } return res; } int main() { int n = 3, k = 10, start_month[] = {1, 2, 1}, end_month[] = {3, 3, 2}, price[] = {5, 7, 8}; cout<< solve(n, k, start_month, end_month, price); return 0; }
3, 10, {1, 2, 1}, {3, 3, 2}, {5, 7, 8}
30
Das obige ist der detaillierte Inhalt vonC++-Programm, um den Mindestbetrag zu ermitteln, der zum Abonnieren eines OTT-Dienstes erforderlich ist. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!