0, 1 problema de mochila

Ejemplo: hay 5 productos en una tienda, los pesos son: 2, 3, 4, 5, 9 y los valores correspondientes son: 3, 4, 5, 8 y 10. Ahora, un ladrón toma una bolsa de 20 kg para robar algo en esta tienda y pregunta: ¿cómo puede robarlo para que valga la pena? ¿El valor total de robar es el mayor? (El ladrón no podrá planificar dinámicamente este año, jajaja)

Inserte la descripción de la imagen aquí

其中k代表前k个商品,C代表剩余多少空间

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Implementación de código C ++:

#include<iostream>
#define N 6
#define W 21
using namespace std;
int B[N][W] = {0};
int w[6] = {0,2,3,4,5,9};
int v[6] = {0,3,4,5,8,10};
void package()
{
    int k, C;
    for(k=1;k<N;k++) {
        for (C = 1; C < W; C++) {
            if (w[k] > C) {
                B[k][C] = B[k - 1][C];
            } else {
                int value1 = B[k - 1][C - w[k]] + v[k];
                int value2 = B[k - 1][C];
                if (value1 > value2) {
                    B[k][C] = value1;
                } else {
                    B[k][C] = value2;
                }
            }
        }
    }
}
int main()
{
    package();
    cout<<B[5][20]<<endl;
    return 0;
}

Implementación de código Python3:

weight = [0, 2, 3, 4, 5, 9]
price = [0, 3, 4, 5, 8, 10]

N = 6
W = 21
B = [[0 for i in range(W)] for j in range(N)]
for k in range(1, N):
    for left in range(1, W):
        if weight[k] > left:
            B[k][left] = B[k - 1][left]
        else:
            value1 = B[k - 1][left - weight[k]] + price[k]
            value2 = B[k - 1][left]
            if value1 > value2:
                B[k][left] = value1
            else:
                B[k][left] = value2

print(B[5][20])

Recopilado de: https://www.bilibili.com/video/av36136952/?spm_id_from=333.788.videocard.3

Publicados 398 artículos originales · ganado elogios 182 · vistas 370 000 +

Supongo que te gusta

Origin blog.csdn.net/yexudengzhidao/article/details/94607832
Recomendado
Clasificación