1. Recursive Exhaustive Simulation
Intuition
At each step, choose one remaining balloon to burst first, collect coins, remove it from the list, and recurse.
Algorithm
- Define
dfs(balloons). - If balloons is empty, return 0.
- For each balloon
iinballoons: - Calculate coins =
(i > 0 ? balloons[i-1] : 1) * balloons[i] * (i < len - 1 ? balloons[i+1] : 1). - Recurse on list without balloon i:
coins + dfs(remaining). - Return maximum coins over all choices.
#include <iostream>#include <vector>#include <algorithm> using namespace std; int dfsPermutations(vector<int> b) { if (b.empty()) return 0; int maxCoins = 0; for (size_t i = 0; i < b.size(); i++) { int left = (i > 0) ? b[i - 1] : 1; int right = (i + 1 < b.size()) ? b[i + 1] : 1; int coins = left * b[i] * right; vector<int> nextB = b; nextB.erase(nextB.begin() + i); maxCoins = max(maxCoins, coins + dfsPermutations(nextB)); } return maxCoins;} int main() { vector<int> nums = {3, 1, 5, 8}; cout << "Max Coins (Permutation DFS): " << dfsPermutations(nums) << endl; return 0;}Time & Space Complexity
- Time complexity:
O(n!) - Space complexity:
O(n) recursion call stack