


Programme C++ pour connaître le nombre minimum de points nécessaires pour obtenir un score G
Supposons que nous ayons deux tableaux p et c, chaque tableau contient D éléments et il existe un autre nombre G. Considérez que dans un concours de programmation, chaque question est notée en fonction de sa difficulté. Le score de la question p[i] est de 100i. Ces problèmes p[1] + ... + p[D] sont tous des problèmes de compétition. Les utilisateurs sur les sites Web de programmation ont un total_score numérique. Le total_score de l'utilisateur est la somme des deux éléments suivants.
Score de base : La somme des scores de tous les problèmes résolus
Récompense : Lorsque l'utilisateur résout tous les problèmes avec un score de 100i, en plus du score de base, une récompense parfaite c[ i] sera obtenu.
Amal est nouvelle dans la compétition et n'a encore résolu aucun problème. Son objectif est d’obtenir une note globale de G ou plus. Nous devons découvrir combien de problèmes il doit résoudre au moins pour atteindre cet objectif.
Donc, si l'entrée est G = 500 ; P = [3, 5] ; C = [500, 800] alors la sortie sera 3
Étapes
Pour résoudre ce problème, nous suivrons les étapes suivantes :
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
Exemple
Voyons l'implémentation ci-dessous pour une meilleure compréhension −
#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; }
Input
500, { 3, 5 }, { 500, 800 }
Output
3
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Vous trouverez ci-dessous un algorithme en langage C pour convertir les chiffres romains en nombres décimaux : Algorithme Étape 1 - Démarrer Étape 2 - Lire les chiffres romains au moment de l'exécution Étape 3 - Longueur : = strlen (roman) Étape 4 - Pour i = 0 à Longueur-1 Étape 4.1-switch(roman[i]) Étape 4.1.1-case'm' : &nbs

La comparaison de chaînes lexicographiques signifie que les chaînes sont comparées dans l’ordre du dictionnaire. Par exemple, s'il y a deux chaînes « pomme » et « appel », la première chaîne viendra en dernier car les trois premiers caractères de « application » sont identiques. Ensuite, pour la première chaîne, le caractère est « l » et dans la deuxième chaîne, le quatrième caractère est « e ». Puisque « e » est plus court que « l », il viendra en premier si nous trions lexicographiquement. Les chaînes sont comparées lexicographiquement avant d'être arrangées. Dans cet article, nous verrons différentes techniques pour comparer lexicographiquement deux chaînes en utilisant C++. Utilisation de la fonction compare() dans les chaînes C++ L'objet C++string a une fonction compare()

Il existe une sorte de jeu de maison dans Yanyu Jianghu. Les joueurs sont libres de construire leur propre maison. Une fois la maison construite avec succès, ils obtiendront également un score de maison dans le jeu. méthode de calcul. Bien sûr, sa méthode de calcul est également. Elle sera calculée en utilisant la méthode de calcul donnée, et les joueurs pourront y jeter un œil. Méthode de calcul du score de la maison à Yanyujianghu 1. Score de la maison : le score d'apparence, le score de placement, le score d'échelle et la recherche sont divisés en quatre parties. 2. Score d'apparence : principalement des points bonus de construction de peau et des points bonus de déplacement (200 points). deux skins de construction. L'un est le patch de main échangé dans le magasin d'accueil ci-dessus, et l'autre est le patch de skin sur le plateau tournant. 3. Points de placement : les points obtenus par les meubles fabriqués, la limite supérieure verte est de 10 points, le bleu. la limite supérieure est de 15 points et la limite supérieure violette est de 10 points.

Les listes chaînées utilisent l’allocation dynamique de mémoire, c’est-à-dire qu’elles grandissent et diminuent en conséquence. Ils sont définis comme des collections de nœuds. Ici, un nœud comporte deux parties, des données et des liens. Les données, liens et listes chaînées sont représentés comme suit - Types de listes chaînées Il existe quatre types de listes chaînées, comme suit : - Liste chaînée simple / Liste chaînée simple Liste chaînée double / Double Liste chaînée simple circulaire Liste chaînée double circulaire Nous utilisons le méthode récursive pour trouver la longueur de la liste chaînée La logique est -intlength(node *temp){ if(temp==NULL) returnl{&n

Il se peut que beaucoup de gens ne sachent pas comment insérer des fractions dans Word. Après tout, nous ne rencontrons pas souvent la situation de saisie de fractions. Mais ce sera plus gênant si vous le rencontrez, nous devons donc comprendre comment saisir les partitions Word. La saisie de fractions dans Word est en fait très simple. Ensuite, je vais vous expliquer comment saisir des fractions dans Word. Il existe de nombreuses façons de saisir des fractions dans Word, l'une d'elles consiste à utiliser la fonction d'insertion de formule. Les étapes sont les suivantes : Après avoir ouvert le document Word, cliquez sur l'option [Insérer] dans la barre de menu, puis sélectionnez [Formule] dans le menu contextuel. Cela ouvrira un éditeur de formule dans lequel vous pourrez saisir la fraction souhaitée. Dans l'éditeur, vous pouvez utiliser les boutons de format de fraction pour créer des fractions, ou saisir manuellement "\frac{numerator}{

La fonction renommer modifie un fichier ou un répertoire de son ancien nom à son nouveau nom. Cette opération est similaire à l’opération de déplacement. Nous pouvons donc également utiliser cette fonction de renommage pour déplacer des fichiers. Cette fonction existe dans le fichier d'en-tête de la bibliothèque stdio.h. La syntaxe de la fonction rename est la suivante : intrename(constchar*oldname,constchar*newname); La fonction rename() accepte deux paramètres. L’un est l’ancien nom et l’autre le nouveau nom. Les deux paramètres sont des pointeurs vers des caractères constants qui définissent l'ancien et le nouveau nom du fichier. Renvoie zéro si le fichier a été renommé avec succès ; sinon, renvoie un entier différent de zéro. Lors d'une opération de changement de nom

Les fonctions hyperboliques sont définies à l'aide d'hyperboles au lieu de cercles et sont équivalentes aux fonctions trigonométriques ordinaires. Il renvoie le paramètre de rapport dans la fonction sinus hyperbolique à partir de l'angle fourni en radians. Mais faites le contraire, ou en d’autres termes. Si nous voulons calculer un angle à partir d’un sinus hyperbolique, nous avons besoin d’une opération trigonométrique hyperbolique inverse comme l’opération sinus hyperbolique inverse. Ce cours montrera comment utiliser la fonction sinus hyperbolique inverse (asinh) en C++ pour calculer des angles en utilisant la valeur du sinus hyperbolique en radians. L'opération arc sinus hyperbolique suit la formule suivante -$$\mathrm{sinh^{-1}x\:=\:In(x\:+\:\sqrt{x^2\:+\:1})}, Où\:In\:is\:logarithme naturel\:(log_e\:k)

Une carte est un type spécial de conteneur en C++ où chaque élément est une paire de deux valeurs, à savoir une valeur clé et une valeur mappée. La valeur clé est utilisée pour indexer chaque élément et la valeur mappée est la valeur associée à la clé. Que la valeur mappée soit unique ou non, la clé est toujours unique. Pour imprimer des éléments de carte en C++, nous devons utiliser un itérateur. Un élément dans un ensemble d’éléments est indiqué par un objet itérateur. Les itérateurs sont principalement utilisés avec des tableaux et d'autres types de conteneurs (tels que des vecteurs), et ils disposent d'un ensemble spécifique d'opérations qui peuvent être utilisées pour identifier des éléments spécifiques dans une plage spécifique. Les itérateurs peuvent être incrémentés ou décrémentés pour référencer différents éléments présents dans une plage ou un conteneur. L'itérateur pointe vers l'emplacement mémoire d'un élément spécifique dans la plage. Imprimer une carte en C++ à l'aide d'itérateurs Voyons d'abord comment définir
