class Solution {
public:
int getMoneyAmount(int n) {
const int tableSize = n;
int table[tableSize][tableSize];
for (int i = n - 1; i >= 0; i--) {
for (int j = i; j < n; j++) {
if (j == i + 1) {
table[i][j] = i + 1;
} else if (i == j) {
table[i][j] = 0;
} else {
int k = i + 1, result = INT_MAX;
while (k < j) {
result = min(result, k + 1 + max(table[i][k - 1], table[k + 1][j]));
k++;
}
table[i][j] = result;
}
}
}
return table[0][n - 1];
}
};