Red de conocimiento informático - Conocimiento informático - Código fuente en C del algoritmo O(VN) completo del problema de la mochila

Código fuente en C del algoritmo O(VN) completo del problema de la mochila

#includelt;iostreamgt;

usando el espacio de nombres std;

int max(int ​​​​a, int b)

{

a =agt ;b?a:b;

return a;

}

int Mochila(int n, int c, int w[], int v [] , int x[])

{

int i, j

int a[n 1][c 1];

for(i=0;ilt;=n;i)a[i][0]=0; // Inicializa la columna 0

for(j=0;jlt;=c;j )a [0][j]=0;//Inicializa la fila 0

for(i=1;ilt;=n;i)//Calcula la fila i para la i-ésima iteración

for(j=1;jlt;=c;j)

if(jlt;w[i]) a[i][j]=a[i-1][j];

p>

else a[i][j]=max(a[i-1][j], a[i-1][j-w[i]] v[i]);

j=c;//encuentra los artículos que se cargarán en la mochila

for(i=n;igt;0;i--)<

{

if(a[i][j]gt; a[i-1][j])

{

x[i]=1 ;

j=j-w[i];

}

más x[i]=0;

return a[n][c]; //devuelve el valor máximo

}

int main()

{

int n =5, c=10, x[n];

int w[6]={0, 2, 2, 6, 5, 4} //w[] y v; [] matrices respectivamente Guarde los pesos de los elementos y sus valores correspondientes. Debido a problemas de función, w[0] y v[0] deben cargarse como 0, o la función se puede modificar para que no tenga que ser 0.

int v[6]={0, 6, 3, 5, 4, 6};

n=Mochila(n, c, w, v, x); /p>

coutlt;lt;nlt;lt;endl;

sistema("pausa");

devuelve 0;

}

p>