Ai
1 Star 2 Fork 5

LilithSangreal/LeetCode-Solutions

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
minimum-cost-to-merge-stones.py 1.18 KB
一键复制 编辑 原始数据 按行查看 历史
kamyu 提交于 2019-03-03 16:07 +08:00 . Create minimum-cost-to-merge-stones.py
# Time: O(n^3)
# Space: O(n^3)
# memoization (top-down dp)
class Solution(object):
def mergeStones(self, stones, K):
"""
:type stones: List[int]
:type K: int
:rtype: int
"""
def dp(prefix, K, i, j, k, lookup):
if (i, j, k) in lookup:
return lookup[i, j, k]
if i == j:
result = 0 if k == 1 else float("inf")
else:
if k == 1:
result = dp(prefix, K, i, j, K, lookup) + \
prefix[j+1] - prefix[i]
else:
result = float("inf")
for mid in xrange(i, j, K-1):
result = min(result, dp(prefix, K, i, mid, 1, lookup) +
dp(prefix, K, mid+1, j, k-1, lookup))
lookup[i, j, k] = result
return result
if (len(stones)-1) % (K-1):
return -1
lookup = {}
prefix = [0]
for x in stones:
prefix.append(prefix[-1]+x)
result = dp(prefix, K, 0, len(stones)-1, 1, lookup)
return result if result != float("inf") else 0
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/LilithSangreal/LeetCode-Solutions.git
git@gitee.com:LilithSangreal/LeetCode-Solutions.git
LilithSangreal
LeetCode-Solutions
LeetCode-Solutions
master

搜索帮助