375. Guess Number Higher or Lower II (Python) (4)

任务终点为5的时候,
任务起点设为5,此时序列为[ 5 ],不花钱,T[5][5]=0。
任务起点设为4,此时序列为[ 4 , 5],花钱4,则有T[5][4]=4。
任务起点设为3,此时序列为[ 3 , 4 ,5 ],花钱4,则有T[5][3]=4。
任务起点设为2,此时序列为[ 2 , 3 , 4 ,5],有
\[ \begin{array}{l} T[5][2] \\ =min(2+T[5][3],3+max(T[2][2],T[5][4]),4+max(T[3][2],T[5][5])) \\ =min(2+4,3+4,4+2) \\ =6 \end{array} \]
任务起点设为1,此时序列为[ 1 , 2 , 3 , 4 , 5 ],有
\[ \begin{array}{l} T[5][1] \\ =min(1+T[5][2],2+max(T[1][1],T[5][3]),3+max(T[2][1],T[5][4]),4+max(T[3][1],T[5][5]),5+T[4][1]) \\ =min(1+6,2+4,3+4,4+2,5+4) \\ =6 \end{array} \]

终点为5填写完毕,此时T为

1 2 3 4 5 6
1   0   0   0   0   0   0  
2   1   0   0   0   0   0  
3   2   2   0   0   0   0  
4   4   3   3   0   0   0  
5   6   6   4   4   0   0  
6   0   0   0   0   0   0  

任务终点为6的时候,
任务起点设为6,此时序列为[ 6 ],不花钱,T[6][6]=0。
任务起点设为5,此时序列为[ 5 , 6 ],花钱5,则有T[6][5]=5。
任务起点设为4,此时序列为[ 4 , 5 , 6 ],花钱5,则有T[6][4]=5。
任务起点设为3,此时序列为[ 3 , 4 , 5 , 6 ],有
\[ \begin{array}{l} T[6][3] \\ =min(3+T[6][4],4+max(T[3][3],T[6][5]),5+max(T[4][3],T[6][6]),6+T[5][3]) \\ =min(3+5,4+5,5+3,6+4) \\ =8 \end{array} \]
任务起点设为2,此时序列为[ 2 , 3 , 4 , 5 , 6 ],有
\[ \begin{array}{l} T[6][2] \\ =min(2+T[6][3],3+max(T[2][2],T[6][4]),4+max(T[3][2],T[6][5]),5+max(T[4][2],T[6][6]),6+T[5][2]) \\ =min(2+8,3+5,4+5,5+3,6+6) \\ =8 \end{array} \]
任务起点设为1,此时序列为[ 1 , 2 , 3 , 4 , 5 , 6 ],有
\[ \begin{array}{l} T[6][1] \\ =min(1+T[6][2],2+max(T[1][1],T[6][3]),3+max(T[2][1],T[6][4]),4+max(T[3][1],T[6][5]),5+max(T[4][1],T[6][6]),6+T[5][1]) \\ =min(1+8,2+8,3+5,4+5,5+4,6+6) \\ =8 \end{array} \]
终点为6填写完毕,此时整个表格填写完毕。
有T为

1 2 3 4 5 6
1   0   0   0   0   0   0  
2   1   0   0   0   0   0  
3   2   2   0   0   0   0  
4   4   3   3   0   0   0  
5   6   6   4   4   0   0  
6   8   8   8   5   5   0  

到此,T[6][1]=8即为结果。再把上述思路转为代码就搞定了。

代码 class Solution: def getMoneyAmount(self, n): """ :type n: int :rtype: int """ L = [[0]*(n+1) for i in range(n+1)] for i in range(1,n+1): for j in range(1,i)[::-1]: M = n*n if i-j<=2: M = i-1 else: for k in range(j+1,i): M = min(M,k+max(L[k-1][j],L[i][k+1])) L[i][j] = M return L[n][1] 测试结果

Runtime:692 ms

beats 69.5% of python3 submissions

375. Guess Number Higher or Lower II (Python)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwyxwz.html