Vous êtes sur la page 1sur 5

UNIVERSIDAD NACIONAL DE SAN

ANTONIO ABAD DEL CUSCO


Escuela Profesional de Ingeniera Informtica
y de Sistemas

Algortmica III
El problema de la
mochila 0-1 y del cambio
de monedas

Docente

: Ing. Ivan Medrano Valencia

Alumno

: Catari Sinsaya Jaime Amilcar

Semestre

: 2016-II

Cdigo

: 100262

1.- El problema de la mochila 0-1 con programacin dinmica:

Cdigo en c:
#include<iostream>
#include<conio.h>
#define max 200
using namespace std;
int matriz[max][max],value[max],pesos[max],cap,sum=0;
void burbuja(int n)
{ int temp,i,j;
for (i=2; i<=n; i++)
for( j=1 ; j<=n - 1; j++)
{
if (pesos[j]< pesos[j+1])
{
temp = pesos[j];
pesos[j] = pesos[j+1];
pesos[j+1] = temp;}}
}
void prueba(int j, int c)
{
if(j>0){
if(c<pesos[j]) prueba(j-1,c);
else {
if((matriz[j-1][c-pesos[j]]+value[j])>matriz[j-1][c]){ prueba(j-1,c-pesos[j]);
cout<<"se tiene "<<pesos[j]<<endl; sum=value[j]+sum;}
else prueba(j-1,c);
}
}
}

void objetos(int n){

prueba(n,cap);
}

void mochila(int n){


int maxint=998;
int c,i,j;
for(c=0;c<=cap;c++) matriz[0][c]=0;
for(j=1;j<=n;j++) matriz[j][0]=0;
for(j=1;j<=n;j++)
for(c=1;c<=cap;c++){
if(c<pesos[j]) matriz[j][c]=matriz[j-1][c];
else {
if(matriz[j-1][c]>=(matriz[j-1][c-pesos[j]]+value[j]))
matriz[j][c]=matriz[j-1][c];
else matriz[j][c]=matriz[j-1][c-pesos[j]]+value[j];
} }
}
int main(){
int i=1,j;
char continuar;
cout<<"\t\t\tBIENVENIDO"<<endl;
cout<<"ingrese peso mochila: "<<endl;
cin>>cap;
cout<<"ingrese peso de objetos : "<<endl;
while(1){
cin>>pesos[i]; i++;
cout<<"desea continuar s/n";
cin>>continuar;
if(continuar=='n') break;}
int mon;
mon=i-1;
burbuja(mon);
for(j=1;j<=mon;j++){
cout<<"valores de peso "<<pesos[j]<<": ";
cin>> value[j]; cout<<endl;}
mochila(mon);
objetos(mon);
/* ver matriz
for(int t=0;t<mon;t++){
for(int h=0;h<cap;h++){
cout<<matriz[t][h];}cout<<endl;}*/
cout<<endl<<sum;

getch();
}

2.- El problema del cambio de monedas:


En java
public class Cambio
{
private int[][] matrizCambio;
private int[] vectorMonedas;
private int cantidad;
private int[] vectorSeleccion;
Cambio(int cantidad, int[] monedas){
this.cantidad = cantidad;
this.vectorMonedas = monedas;
matrizCambio = calcularMonedas(cantidad, monedas);
vectorSeleccion = seleccionarMonedas(cantidad, monedas, matrizCambio);
}
public int[] getVectorSeleccion(){
return this.vectorSeleccion;
}
private int[][] calcularMonedas(int cantidad, int[] monedas){
int[][] matrizCambio = new int[monedas.length + 1][cantidad + 1];
for (int i = 0; i < monedas.length; i++)
matrizCambio[i][0] = 0;
for (int j = 1; j <= cantidad; j++)
matrizCambio[0][j] = 99;
for (int i = 1; i <= monedas.length; i++)
for (int j = 1; j <= cantidad; j++) {
if (j < monedas[i - 1]) {
matrizCambio[i][j] = matrizCambio[i - 1][j];
} else {
int minimo = 0;
minimo = min(matrizCambio[i - 1][j] , matrizCambio[i][j- monedas[i 1]] + 1);
matrizCambio[i][j] = minimo;
}

}
return matrizCambio;
}
private int[] seleccionarMonedas(int c, int[] monedas, int[][]tabla ){
int i,j;
int[] seleccion = new int[monedas.length];
for(i = 0; i< monedas.length; i++){
seleccion[i]=0;
}
monedas.length;
j= c;
while(j>0){
if(i>1 && tabla[i][j]==tabla[i-1][j]){
i--;
}
else{
seleccion[i-1]++;
j = j - monedas[i-1];
}
}
return seleccion;
}
private int min(int a, int b){
if(a<b)
return a;
else
return b;
}
}

i=

Vous aimerez peut-être aussi