DP Série Starter - -01 sac à dos problème havresac

-01 sac à dos problème havresac

problème a longtemps été havresac utilisé pour l' étude des souris DP, pour le problème de havresac je DFS a occupé au cours des châtaignes, cette fois nous avons pensé que la transition à en apprendre davantage sur le sac à dos 01.
Quel est le 01 sac à dos il? Cela signifie que cet élément ne conteste pas la tenue. Autrement dit, face à la décision que j'ai deux options, prendre et ne pas prendre. Mais ne pas prendre et aura un impact sur les résultats en arrière, de sorte que vous ne pouvez pas coup d'œil solution (solution optimale, je vais utiliser le schéma suivant pour OPT). Nous ne pouvons donc mettre tous les cas énumérés, puis sélectionnez, le processus de sélection, nous avons beaucoup de problèmes, bien sûr, le problème pour DP est un double comptage, donc nous considérons comment suffisamment de transition de l' État pour résoudre ce problème.
Tout d' abord, je vous recommande un site de blog essentiel DP débutant, WOC trop Niubi! ! ! QAQ
Prenons donc un sujet portant un rideau pour nous révéler aujourd'hui.

Titre description

Il y a des éléments N V et une capacité du sac à dos. Chaque élément ne peut être utilisé qu'une seule fois. Le volume est les éléments i-ème vi, une valeur wi. Quelle résolution des éléments dans le sac, le volume total de ces éléments ne peut pas dépasser la capacité du sac à dos, et la valeur totale du maximum. La valeur de sortie maximale.

Format d'entrée

La première ligne de deux nombres entiers N, V, séparés par des espaces, respectivement, et le nombre d'articles de volume. En bas, il y a N lignes, chaque ligne deux entiers vi, wi, séparés par des espaces, respectivement, et le volume de la i-ième valeur des éléments.

Format de sortie

Délivrer en sortie un nombre entier représentant la valeur maximale.

Plage de données

0 <N, V≤1000
0 <nous, wi≤1000

Exemple d'entrée

5 4
1 2
2 4
3 4
4 5

Exemple de sortie

8

soumettre

OK Nous utilisons deux méthodes pour comprendre et résoudre le problème.
Tout d' abord, le problème de havresac est l'élection et ne pas voter pour la question, si elle est élue, elle réduira le volume du sac à dos, la valeur va augmenter, donc nous devons étudier chaque utilisation maximale sélectionnée de la valeur restante de l' espace après un livre.

Donc, nous devrions commencer à partir de l'espace restant, combien de l'espace restant, on ne trouve que la solution optimale.
Alors , laissez l'espace restant de 1 à commencer à penser à (un total de six types de cas reste de l' espace est 0,1,2,3,4,5, respectivement) de ces six, et chacun de l'espace restant sera décidée par le dernier espace restant, Si la présence d'une présence résiduelle dans cet article, la valeur ne choisira pas cette que la valeur actuelle des petits objets.

#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
int f[1010][1010];
int n,m;
int v[10000],w[10000];
int main()
{
 cin>>n>>m;
 for(int i=1;i<=n;i++)cin>>v[i]>>w[i];
 for(int i=1;i<=n;i++)
 for(int j=0;j<=m;j++)
 {
  f[i][j]=f[i-1][j];
  if(j>=v[i])
  f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);
 }
 int res=0;
 for(int i=0;i<=m;i++)res=max(res,f[n][i]);
 cout<<res<<endl;
 return 0;
 } 

Parlez de placement répété de la question, l'état actuel est placé semble pas susceptible de répétition, parce qu'il va maintenant mettre tout et tenir sera placé dans différentes dimensions entre les différentes dimensions à transférer.
Donc , il n'y a pas de problème répéter placé.
Mais le tableau à une dimension s'il y a un tel cas.
Voici le code d'un tableau à une dimension de la lumière

#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
int w[1010],v[1010];
int f[200000];
int main()
{
 int n,m;
 cin>>n>>m;
 for(int i=0;i<n;i++)cin>>w[i]>>v[i];
 for(int i=n;i>=0;i--)
 for(int j=m;j>=w[i];j--)
  f[j]=max(f[j],f[j-w[i]]+v[i]);
  cout<<f[m]<<endl;
 } 

Vous trouverez mon code circule dans l' ordre inverse parce que, si j'étais séquence positive, alors il sera possible de répéter les articles précédents placés. Si vous allez dans l' ordre inverse, alors, n'a pas mis avant chaque mise à jour sont basées sur l'état de l'objet est transféré sur. Donc , il n'y aura pas de répétition du problème. Donc , si vous mis à jour en fonction de la mise à jour, il est probable que cela va répéter des objets placés!
mois de roue By-

Publié 32 articles originaux · a gagné les éloges 12 · vues 1195

Je suppose que tu aimes

Origine blog.csdn.net/qq_35339563/article/details/103580729
conseillé
Classement