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. You win the game when you guess the number I picked.
Example:
n = 10, I pick 8.
First round: You guess 5, I tell you that it's higher. You pay $5. Second round: You guess 7, I tell you that it's higher. You pay $7. Third round: You guess 9, I tell you that it's lower. You pay $9.
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.
Credits:Special thanks to @agave and @StefanPochmann for adding this problem and creating all test cases.
Solution
publicclassSolution{publicintgetMoneyAmount(intn){if(n <1)return0;int[][] dp =newint[n +1][n +1];returnget(dp,1, n);}privateintget(int[][]dp,intx,inty){if(x >= y)return0;if(dp[x][y]!=0)return dp[x][y];int max =Integer.MAX_VALUE;for(int z = x; z <= y; z++){ max =Math.min(Math.max(get(dp, x, z -1)+ z, get(dp, z +1, y)+ z), max);} dp[x][y]= max;return max;}}