3
vector<vector<int>> dp;5
int solve(int start, int end) {6
if (start >= end) return 0;8
if (dp[start][end] != -1) return dp[start][end];12
for (int i = start; i <= end; i++) {13
int left = solve(start, i - 1);14
int right = solve(i + 1, end);15
ans = max(left, right) + i; // this line gurantee to include the money16
// that is needed to win higher values17
result = min(ans, result);20
return dp[start][end] = result;23
int getMoneyAmount(int n) {25
dp = vector<vector<int>>(n + 1, vector<int>(n + 1, -1));