|
发表于 2020-3-11 15:35:16
|
显示全部楼层
本帖最后由 mdphd 于 2020-3-11 16:32 编辑
- a = [
- [1,3,1],
- [1,5,1],
- [4,2,1]
- ]
- b = [[0]*(max(len(a),len(a[0])))]*(min(len(a),len(a[0])))
- if len(a) <= len(a[0]):
- b = a
- else:
- def transformMatrix(m):
- r = [[] for i in m[0]]
-
- for ele in m:
- for i in range(len(ele)):
- r[i].append(ele[i])
- return r
- b = transformMatrix(a)
- m, n = len(b), len(b[0])
- c = b[:][:]
- for x in range(1, m):
- for i in range(1, x):
- b[i][x-i] = max(b[i - 1][x - i], b[i][x - i - 1]) + c[i][x - i]
- b[x][0] = b[x - 1][0] +c[x][0]
- b[0][x] = b[0][x - 1] + c[0][x]
- for x in range(m, n):
- for i in range(1, m):
- b[i][x-i] = max(b[i - 1][x - i], b[i][x - i - 1]) + c[i][x - i]
- b[0][x] = b[0][x - 1] + c[0][x]
- for x in range(n, m + n -1):
- for i in range(x - n + 1, m):
- b[i][x-i] = max(b[i - 1][x - i], b[i][x - i -1]) + c[i][x - i]
- print(b[m - 1][n - 1])
复制代码
这个算法在m,n很大时应该会很快 |
评分
-
查看全部评分
|