We are playing the Guess Game. The game is as follows:
I pick a number from 1 to n. You have to guess which number I picked.
Every time you guess wrong, I’ll tell you whether the number I picked is higher or lower.
However, when you guess a particular number x, and you guess wrong, you pay x.YouwinthegamewhenyouguessthenumberIpicked.Example:n=10,Ipick8.Firstround:Youguess5,Itellyouthatit′shigher.Youpay5.
Second round: You guess 7, I tell you that it’s higher. You pay 7.Thirdround:Youguess9,Itellyouthatit′slower.Youpay9.
Game over. 8 is the number I picked.
You end up paying 5+7 + 9=21.
Given a particular n ≥ 1, find out how much money you need to have to guarantee a win.
public class Solution {
public int getMoneyAmount(int n) {
int[][] table = new int[n+1][n+1];
for (int j = 2; j <= n; j++) {
for (int i = j-1; i > 0; i--) {
int tmp = Integer.MAX_VALUE;
for (int k = i+1; k < j; k++) {
int p = k + Math.max(table[i][k-1], table[k+1][j]);
tmp = Math.min(tmp, p);
}
table[i][j] = i+1 == j ? i: tmp;
}
}
return table[1][n];
}
}