int mochila( int idx , int n , int peso , int valor , struct item itens[] ) { if( idx == n ) { if( peso < 0 ) { return 0; } return valor; } else { return max( mochila(idx+1,n, peso,valor,itens) , mochila(idx+1,n,peso - itens[idx].peso , valor + itens[idx].valor , itens ) ); } }
void mochila( int idx , int n , int peso , int valor , int * ans , struct item itens[] ) { if( idx == n ) { if( peso >= 0 ) { if( *ans < valor ) { *ans = valor; } } } else { mochila( idx+1 , n, peso , valor, ans , itens ); mochila( idx+1 , n, peso - itens[idx].peso , valor + itens[idx].valor , ans , itens ); } }
int main() { double p[N] = {4, 3, 2}; double v[N] = {30, 20, 10}; double peso = 8; double valor = 0; double parte = 1; int paso = 0; mochila(p,v,N,paso,peso,valor,parte); std:: cout << paso << " " << peso << " " << valor << " " << parte ; return 0; }
void mochila (double p[], double v[], int n, int& paso, double& peso, double& valor, double& parte) { if (paso != n) { if (p[paso] < peso) { peso -= p[paso]; valor += v[paso]; paso++; mochila(p,v,n,paso,peso,valor,parte); } else { parte = peso / p[paso]; valor += v[paso] * parte; peso = 0; paso++; //fin } } //else fin }
int main(int argc, char const *argv[]) { int quantidade, capacidade; scanf("%d%d", &quantidade, &capacidade); struct item itens[quantidade]; int i; for ( i = 0; i < quantidade ; ++i) { scanf("%d" , &itens[i].valor ); } for ( i = 0; i < quantidade ; ++i) { scanf("%d" , &itens[i].peso ); } printf("%d\n", mochila(0,quantidade,capacidade,0,itens) ); return 0; }