中级农民
- 积分
- 112
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2019-9-8
- 最后登录
- 1970-1-1
|
记忆化递归,算得210,其他的没测过。
- def bt(i,j,d,p):
- if i == m-1 and j == n-1:
- return max(1-int(array[i][j]),1)
- if i >= m or j >= n:
- return float('inf')
- if (i,j,d,p) in memo:
- return memo[(i,j,d,p)]
- if array[i][j] != 'D' and array[i][j] != 'P':
- val = int(array[i][j])
- if d and val > 0:
- val = int(array[i][j])*2
- d = False
- elif p and val < 0:
- val = 0
- p = False
- else:
- val = 0
- v1 = bt(i+1,j,d or array[i][j] == 'D',p or array[i][j] == 'P')
- v2 = bt(i,j+1,d or array[i][j] == 'D',p or array[i][j] == 'P')
- memo[(i,j,d,p)] = max(min(v1,v2)-val,1)
- return memo[(i,j,d,p)]
- array = [['-1']*5,['D','1','2','3','4'],['-1','-2','-3','1','2'],['5','10','-1','1','2'],['10','5','50','-1','-300']]
- m,n = len(array),len(array[0])
- memo = {}
- res = bt(0,0,False,False)
- print(res)
复制代码 [/i][/i][/i][/i][/i][/i][/i][/i][/i] |
|