原题题目
代码实现(首刷基本等于自解)
int getMoneyAmount(int n){
int dp[n+1][n+1],end,start,dvalue,pos;
memset(dp,0,sizeof(dp));
for(end=2;end<=n;end++)
{
for(start = end-1;start>=1;start--)
{
dvalue = end - start;
if(dvalue == 1) dp[start][end] = start;
else
{
dp[start][end] = INT_MAX;
for(pos = end-1; pos > start; pos--)
dp[start][end] = fmin(dp[start][end],fmax(pos+dp[pos+1][end],pos+dp[start][pos-1]));
}
}
}
return dp[1][n];
}