Maison développement back-end C++ Comment utiliser l'algorithme du problème du sac à dos en C++

Comment utiliser l'algorithme du problème du sac à dos en C++

Sep 21, 2023 pm 02:18 PM
动态规划 背包问题 algorithme de sac à dos c++

Comment utiliser lalgorithme du problème du sac à dos en C++

Comment utiliser l'algorithme du problème du sac à dos en C++

Le problème du sac à dos est l'un des problèmes classiques des algorithmes informatiques. Il implique comment sélectionner certains éléments à mettre dans le sac à dos en fonction d'une capacité donnée du sac à dos, de sorte que le total soit atteint. maximiser la valeur des articles. Cet article présentera en détail comment utiliser l'algorithme de programmation dynamique en C++ pour résoudre le problème du sac à dos et donnera des exemples de code spécifiques.

Tout d'abord, nous devons définir l'entrée et la sortie du problème du sac à dos. L'entrée inclut le tableau de poids wt[] de l'article, le tableau de valeurs val[] de l'article et la capacité W du sac à dos. Le résultat consiste à choisir les articles à mettre dans le sac à dos pour maximiser la valeur. Il est défini comme suit :

int knapSack(int W, int wt[], int val[], int n) {
   // 动态规划表格
   int dp[n+1][W+1];
  
   // 填充动态规划表格
   for (int i = 0; i <= n; i++) {
      for (int j = 0; j <= W; j++) {
         if (i == 0 || j == 0)
            dp[i][j] = 0; // 边界条件
         else if (wt[i - 1] <= j)
            dp[i][j] = max(val[i - 1] + dp[i - 1][j - wt[i - 1]], dp[i - 1][j]);
         else
            dp[i][j] = dp[i - 1][j];
      }
   }
  
   return dp[n][W]; // 返回最大价值
}
Copier après la connexion

Dans le code ci-dessus, nous utilisons un tableau bidimensionnel dp[][] pour représenter la table de transition d'état de la programmation dynamique, où dpi représente la sélection des i premiers éléments et la capacité du sac à dos est j Valeur totale maximale. L'algorithme spécifique est implémenté comme suit :

  1. Initialisez la première ligne et la première colonne du tableau bidimensionnel dp[][] à 0, indiquant qu'il n'y a aucun élément parmi lequel choisir ou la valeur totale maximale lorsque la capacité est de 0 est 0 ;
  2. From À partir de la ligne 1 et de la colonne 1, calculez chaque dpi :

    • Si le poids de l'article actuel wt[i-1] est inférieur ou égal à la capacité du sac à dos j, vous pouvez choisir de mettre l'article ou ne pas y mettre l'article. Sélectionnez la valeur totale la plus élevée dans la situation
    • Si le poids de l'article actuel wt[i-1] est supérieur à la capacité du sac à dos j, l'article actuel ne peut pas être mis ; in, et la valeur totale est égale à l'état précédent, c'est-à-dire dpi-1 ;
  3. Finally Renvoie dpn, qui représente la valeur totale maximale lors de la sélection parmi les n premiers éléments et la capacité du sac à dos est W.

Ce qui suit est un exemple de code utilisant l'algorithme du problème du sac à dos :

#include 
using namespace std;

int knapSack(int W, int wt[], int val[], int n) {
   // 动态规划表格
   int dp[n+1][W+1];
  
   // 填充动态规划表格
   for (int i = 0; i <= n; i++) {
      for (int j = 0; j <= W; j++) {
         if (i == 0 || j == 0)
            dp[i][j] = 0; // 边界条件
         else if (wt[i - 1] <= j)
            dp[i][j] = max(val[i - 1] + dp[i - 1][j - wt[i - 1]], dp[i - 1][j]);
         else
            dp[i][j] = dp[i - 1][j];
      }
   }
  
   return dp[n][W]; // 返回最大价值
}

int main() {
   int val[] = {60, 100, 120};
   int wt[] = {10, 20, 30};
   int W = 50;
   int n = sizeof(val) / sizeof(val[0]);
   cout << "最大总价值为:" << knapSack(W, wt, val, n) << endl;
   return 0;
}
Copier après la connexion

Exécutez le code ci-dessus et la valeur totale maximale du résultat de sortie est de 220, ce qui signifie que lorsque la capacité du sac à dos est de 50, la valeur maximale qui peut être obtenu en sélectionnant la valeur totale des éléments 1 et 3.

En plus des méthodes de programmation dynamique ci-dessus, le problème du sac à dos peut également être résolu en utilisant d'autres méthodes telles que le retour en arrière et les algorithmes gloutons. Ce qui précède est une introduction détaillée sur la façon dont nous utilisons l'algorithme du problème du sac à dos en C++. J'espère que cela vous sera utile.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Comment écrire un algorithme de programmation dynamique en utilisant C# Comment écrire un algorithme de programmation dynamique en utilisant C# Sep 20, 2023 pm 04:03 PM

Comment utiliser C# pour écrire un algorithme de programmation dynamique Résumé : La programmation dynamique est un algorithme courant pour résoudre des problèmes d'optimisation et convient à une variété de scénarios. Cet article explique comment utiliser C# pour écrire des algorithmes de programmation dynamique et fournit des exemples de code spécifiques. 1. Qu'est-ce qu'un algorithme de programmation dynamique ? La programmation dynamique (DP) est une idée algorithmique utilisée pour résoudre des problèmes avec des sous-problèmes qui se chevauchent et des propriétés de sous-structure optimales. La programmation dynamique décompose le problème en plusieurs sous-problèmes à résoudre et enregistre la solution à chaque sous-problème.

Comment écrire un algorithme de problème de sac à dos en utilisant C# Comment écrire un algorithme de problème de sac à dos en utilisant C# Sep 19, 2023 am 09:21 AM

Comment écrire un algorithme de problème de sac à dos en utilisant C# Le problème du sac à dos (Knapsack Problem) est un problème d'optimisation combinatoire classique, qui décrit un sac à dos avec une capacité donnée et une série d'éléments, chaque élément ayant sa propre valeur et son propre poids. L’objectif est de trouver une stratégie optimale qui maximise la valeur totale des objets emballés dans le sac à dos sans dépasser la capacité du sac à dos. En C#, le problème du sac à dos peut être résolu grâce à la programmation dynamique. L'implémentation spécifique est la suivante : usingSystem;namespace

Analyse d'algorithme PHP : Comment utiliser un algorithme de programmation dynamique pour résoudre le problème de sous-chaîne palindrome la plus longue ? Analyse d'algorithme PHP : Comment utiliser un algorithme de programmation dynamique pour résoudre le problème de sous-chaîne palindrome la plus longue ? Sep 19, 2023 pm 12:19 PM

Analyse d'algorithme PHP : Comment utiliser un algorithme de programmation dynamique pour résoudre le problème de sous-chaîne palindrome la plus longue ? La programmation dynamique (programmation dynamique) est une idée d'algorithme couramment utilisée qui peut résoudre de nombreux problèmes complexes. L’un d’eux est le problème de la sous-chaîne palindrome la plus longue, qui consiste à trouver la longueur de la sous-chaîne palindrome la plus longue dans une chaîne. Cet article explique comment utiliser PHP pour écrire un algorithme de programmation dynamique afin de résoudre ce problème et fournit des exemples de code spécifiques. Définissons d’abord la sous-chaîne palindrome la plus longue. Une chaîne palindrome fait référence à une chaîne qui lit la même chose vers l'avant et vers l'arrière, et la chaîne palindrome

Comment utiliser l'algorithme du problème du sac à dos en C++ Comment utiliser l'algorithme du problème du sac à dos en C++ Sep 21, 2023 pm 02:18 PM

Comment utiliser l'algorithme du problème du sac à dos en C++ Le problème du sac à dos est l'un des problèmes classiques des algorithmes informatiques. Il implique la manière de sélectionner certains éléments à mettre dans le sac à dos en fonction d'une capacité donnée du sac à dos afin de maximiser la valeur totale des éléments. Cet article présentera en détail comment utiliser l'algorithme de programmation dynamique en C++ pour résoudre le problème du sac à dos et donnera des exemples de code spécifiques. Tout d’abord, nous devons définir l’entrée et la sortie du problème du sac à dos. L'entrée inclut le tableau de poids wt[] de l'article, le tableau de valeurs val[] de l'article et la capacité W du sac à dos. Le résultat est quels objets sont sélectionnés

Comment résoudre le problème du sac à dos en PHP en utilisant un algorithme de programmation dynamique et obtenir une solution optimale ? Comment résoudre le problème du sac à dos en PHP en utilisant un algorithme de programmation dynamique et obtenir une solution optimale ? Sep 21, 2023 am 10:33 AM

Comment résoudre le problème du sac à dos en PHP en utilisant un algorithme de programmation dynamique et obtenir une solution optimale ? Le problème du sac à dos est l’un des problèmes d’optimisation combinatoire classiques en informatique. Étant donné un ensemble d'articles et la capacité d'un sac à dos, la manière de sélectionner les articles à mettre dans le sac à dos afin de maximiser la valeur totale des articles dans le sac à dos est au cœur du problème du sac à dos qui doit être résolu. La programmation dynamique est l'une des méthodes courantes pour résoudre le problème du sac à dos. Il obtient finalement la solution optimale en divisant le problème en sous-problèmes et en enregistrant les solutions des sous-problèmes. Ci-dessous, nous expliquerons en détail comment utiliser l'algorithme de programmation dynamique en PHP

Programmation dynamique de mémisation (1D, 2D et 3D) en Java Programmation dynamique de mémisation (1D, 2D et 3D) en Java Aug 23, 2023 pm 02:13 PM

La mémorisation est une technique basée sur la programmation dynamique utilisée pour améliorer les performances des algorithmes récursifs en garantissant qu'une méthode ne s'exécute pas plusieurs fois sur le même ensemble d'entrées, en enregistrant les résultats (stockés dans un tableau) pour les entrées fournies. La mémorisation peut être réalisée grâce à une approche descendante qui met en œuvre des méthodes récursives. Comprenons cette situation à travers un exemple de base de séquence de Fibonacci. Mémoïsation 1-D Nous considérerons un algorithme récursif avec un seul paramètre non constant (un seul paramètre change de valeur), cette méthode est donc appelée mémoïsation 1-D. Le code suivant permet de trouver le Nième (tous les termes jusqu'à N) dans la séquence de Fibonacci. Exemple publicintfibonacci(intn){ &nb

Explication détaillée de l'algorithme de programmation dynamique en PHP Explication détaillée de l'algorithme de programmation dynamique en PHP Jul 07, 2023 am 10:48 AM

Explication détaillée de l'algorithme de programmation dynamique en PHP La programmation dynamique (programmation dynamique) est une idée algorithmique pour résoudre des problèmes. Elle résout le problème global en décomposant le problème en sous-problèmes plus petits et en utilisant les résultats des sous-problèmes résolus. En PHP, les algorithmes de programmation dynamique peuvent être largement utilisés dans de nombreux domaines de l'informatique et des mathématiques, tels que les chemins les plus courts, la correspondance de chaînes et les problèmes de sac à dos. Cet article présentera en détail les principes de l'algorithme de programmation dynamique en PHP et fournira des exemples de code pour illustrer. 1. Calcul de programmation dynamique

Comment implémenter l'algorithme du problème du sac à dos en utilisant PHP Comment implémenter l'algorithme du problème du sac à dos en utilisant PHP Jul 09, 2023 am 09:15 AM

Comment utiliser PHP pour implémenter l'algorithme du problème du sac à dos. Le problème du sac à dos est un problème d'optimisation combinatoire classique. Son objectif est de sélectionner un ensemble d'éléments pour maximiser leur valeur totale dans une capacité de sac à dos limitée. Dans cet article, nous présenterons comment utiliser PHP pour implémenter l'algorithme du problème du sac à dos et fournirons des exemples de code correspondants. Description du problème du sac à dos Le problème du sac à dos peut être décrit de la manière suivante : étant donné un sac à dos d'une capacité C et N articles. Chaque élément i a un poids wi et une valeur vi. Il est nécessaire de sélectionner certains éléments parmi ces N éléments de telle sorte qu'ils

See all articles