Problema de mochila C++
#include
int?n,W[1000],T,b[1000];
void?f(int? t,int?sum)
{ int?i; si(t>n+1) regresa; si(suma>T) regresa; 1;i if(b[i]==1) printf("W%d=%d?",i,W[i ]); } printf("\n"); retorno } f(t+1,suma+W[t]); ); } int?main() { int?P[1000],a[100000][2],i,j; (scanf("%d%d",&n,&T)!=EOF){ /*Datos de entrada*/ for(i=1;i<=n;i++) scanf("%d %d",&W[i],&P[i]); for(i=0;i<=T;i++) a[i][0]=a[i][1] =0; /************************************/ f( 1,0);//Llamar a la función para resolver el problema 1/*Algoritmo de mochila 0-1*/ for(i=1;i<=n;i++){ for(j=0;j a[j][i%2]=a[j][(i+1)%2]; for(;j<=T;j++) if(a[j-W[i]][(i+1)%2]+P[i]>a[j][(i+1 )%2]) a[j][i%2]=a[j-W[i]][(i+1)%2]+P[i]; si no a[j][ i%2]=a[j][(i+1)%2]; } printf("max=%d.\n\n",a[T][n%2]); /************************************/ } return?0; } El formato de entrada es: n?T W1?P1 W2?P2 .?. .?. .?. Wn?Pn Salida del resultado: ¿Semana1?Semana2... Semana1?Semana2... max=valor precio total máximo. Ejemplo: Entrada : 5?10 1?1 2?2 3?3 4? 4 5?5 Salida: W1=1?W2=2?W3=3?W4=4 W1 =1?W4=4?W5=5 W2=2?W3=3?W5=5 max=10.