const dishes = [
{ "id": 0, "name": "Pizza", "price": 8, "vote": 12 },
{ "id": 1, "name": "Gà rán", "price": 5, "vote": 9 },
{ "id": 2, "name": "Khoai tây chiên", "price": 3, "vote": 7 },
{ "id": 3, "name": "Trà sữa", "price": 3, "vote": 6 },
{ "id": 4, "name": "Bánhngọt", "price": 2, "vote": 4 }
]
const budget = 10;
const n = dishes.length;
const S = {
length: n,
depth: 0,
choices: [1, 0],
current_state: [],
arr: dishes,
}
function f(S, result) {
if (S.depth === n) {
result.push([...S.current_state]);
return;
}
for (const choice of S.choices) {
if (choice) {
S.current_state = [...S.current_state, dishes[S.depth]]
}
S.depth += 1;
f(S, result);
S.depth -= 1;
if (choice) {
S.current_state.pop();
}
}
}
let result = []
f(S, result)
let answer_array = [];
let maxVote = 0;
for (const state of result) {
let sumVote = 0;
let sumPrice = 0;
for (const dish of state) {
sumVote += dish.vote
sumPrice += dish.price
}
if (sumVote > maxVote && sumPrice <= budget) {
answer_array = [...state]
maxVote = sumVote
}
}
console.log(JSON.stringify(answer_array))
Y29uc3QgZGlzaGVzID0gWwogICAgeyAiaWQiOiAwLCAibmFtZSI6ICJQaXp6YSIsICJwcmljZSI6IDgsICJ2b3RlIjogMTIgfSwKICAgIHsgImlkIjogMSwgIm5hbWUiOiAiR8OgIHLDoW4iLCAicHJpY2UiOiA1LCAidm90ZSI6IDkgfSwKICAgIHsgImlkIjogMiwgIm5hbWUiOiAiS2hvYWkgdMOieSBjaGnDqm4iLCAicHJpY2UiOiAzLCAidm90ZSI6IDcgfSwKICAgIHsgImlkIjogMywgIm5hbWUiOiAiVHLDoCBz4buvYSIsICJwcmljZSI6IDMsICJ2b3RlIjogNiB9LAogICAgeyAiaWQiOiA0LCAibmFtZSI6ICJCw6FuaG5n4buNdCIsICJwcmljZSI6IDIsICJ2b3RlIjogNCB9Cl0KY29uc3QgYnVkZ2V0ID0gMTA7CmNvbnN0IG4gPSBkaXNoZXMubGVuZ3RoOwpjb25zdCBTID0gewogICAgbGVuZ3RoOiBuLAogICAgZGVwdGg6IDAsCiAgICBjaG9pY2VzOiBbMSwgMF0sCiAgICBjdXJyZW50X3N0YXRlOiBbXSwKICAgIGFycjogZGlzaGVzLAp9CgpmdW5jdGlvbiBmKFMsIHJlc3VsdCkgewogICAgaWYgKFMuZGVwdGggPT09IG4pIHsKICAgICAgICByZXN1bHQucHVzaChbLi4uUy5jdXJyZW50X3N0YXRlXSk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZm9yIChjb25zdCBjaG9pY2Ugb2YgUy5jaG9pY2VzKSB7CiAgICAgICAgaWYgKGNob2ljZSkgewogICAgICAgICAgICBTLmN1cnJlbnRfc3RhdGUgPSBbLi4uUy5jdXJyZW50X3N0YXRlLCBkaXNoZXNbUy5kZXB0aF1dCiAgICAgICAgfQogICAgICAgIFMuZGVwdGggKz0gMTsKCiAgICAgICAgZihTLCByZXN1bHQpOwoKICAgICAgICBTLmRlcHRoIC09IDE7CiAgICAgICAgaWYgKGNob2ljZSkgewogICAgICAgICAgICBTLmN1cnJlbnRfc3RhdGUucG9wKCk7CiAgICAgICAgfQogICAgfQp9CmxldCByZXN1bHQgPSBbXQpmKFMsIHJlc3VsdCkKbGV0IGFuc3dlcl9hcnJheSA9IFtdOwpsZXQgbWF4Vm90ZSA9IDA7CmZvciAoY29uc3Qgc3RhdGUgb2YgcmVzdWx0KSB7CiAgICBsZXQgc3VtVm90ZSA9IDA7CiAgICBsZXQgc3VtUHJpY2UgPSAwOwogICAgZm9yIChjb25zdCBkaXNoIG9mIHN0YXRlKSB7CiAgICAJc3VtVm90ZSArPSBkaXNoLnZvdGUKICAgIAlzdW1QcmljZSArPSBkaXNoLnByaWNlCiAgICB9CiAgICBpZiAoc3VtVm90ZSA+IG1heFZvdGUgJiYgc3VtUHJpY2UgPD0gYnVkZ2V0KSB7CiAgICAgICAgYW5zd2VyX2FycmF5ID0gWy4uLnN0YXRlXQogICAgICAgIG1heFZvdGUgPSBzdW1Wb3RlCiAgICB9Cn0KY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoYW5zd2VyX2FycmF5KSkK