#include <stdio.h>
int w[10], p[10], n;
// Function to get max of two integers
int max(int a, int b) {
return a > b ? a : b;
}
// Recursive knapsack function
int knap(int i, int m) {
if (i > n) return 0; // Base case: No more items
if (w[i] > m)
return knap(i + 1, m); // Cannot include the item
else
return max(knap(i + 1, m), knap(i + 1, m - w[i]) + p[i]);
}
int main() {
int m, i, max_profit;
printf("\nEnter the number of objects: ");
scanf("%d", &n);
printf("\nEnter the knapsack capacity: ");
scanf("%d", &m);
printf("\nEnter profit followed by weight for each item:\n");
for (i = 1; i <= n; i++) {
scanf("%d %d", &p[i], &w[i]);
}
max_profit = knap(1, m);
printf("\nMax profit = %d\n", max_profit);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgd1sxMF0sIHBbMTBdLCBuOwoKLy8gRnVuY3Rpb24gdG8gZ2V0IG1heCBvZiB0d28gaW50ZWdlcnMKaW50IG1heChpbnQgYSwgaW50IGIpIHsKICAgIHJldHVybiBhID4gYiA/IGEgOiBiOwp9CgovLyBSZWN1cnNpdmUga25hcHNhY2sgZnVuY3Rpb24KaW50IGtuYXAoaW50IGksIGludCBtKSB7CiAgICBpZiAoaSA+IG4pIHJldHVybiAwOyAvLyBCYXNlIGNhc2U6IE5vIG1vcmUgaXRlbXMKCiAgICBpZiAod1tpXSA+IG0pCiAgICAgICAgcmV0dXJuIGtuYXAoaSArIDEsIG0pOyAvLyBDYW5ub3QgaW5jbHVkZSB0aGUgaXRlbQogICAgZWxzZQogICAgICAgIHJldHVybiBtYXgoa25hcChpICsgMSwgbSksIGtuYXAoaSArIDEsIG0gLSB3W2ldKSArIHBbaV0pOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBtLCBpLCBtYXhfcHJvZml0OwoKICAgIHByaW50ZigiXG5FbnRlciB0aGUgbnVtYmVyIG9mIG9iamVjdHM6ICIpOwogICAgc2NhbmYoIiVkIiwgJm4pOwoKICAgIHByaW50ZigiXG5FbnRlciB0aGUga25hcHNhY2sgY2FwYWNpdHk6ICIpOwogICAgc2NhbmYoIiVkIiwgJm0pOwoKICAgIHByaW50ZigiXG5FbnRlciBwcm9maXQgZm9sbG93ZWQgYnkgd2VpZ2h0IGZvciBlYWNoIGl0ZW06XG4iKTsKICAgIGZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgc2NhbmYoIiVkICVkIiwgJnBbaV0sICZ3W2ldKTsKICAgIH0KCiAgICBtYXhfcHJvZml0ID0ga25hcCgxLCBtKTsKICAgIHByaW50ZigiXG5NYXggcHJvZml0ID0gJWRcbiIsIG1heF9wcm9maXQpOwoKICAgIHJldHVybiAwOwp9