leetcode 664奇怪的打印机 区间dp

it2023-05-25  86

leetcode刷题系列

原题链接: 戳这里.

代码

class Solution: def strangePrinter(self, s: str) -> int: dp={} def getdp(i,j): if i>j: # 递归的终止条件 return 0 ans=1+getdp(i+1,j) # 每次结果最大就是新增的与之前都不同,所以加1 if (i,j) not in dp: # 不在就需要计算 for k in range(i+1,j+1): if s[i]==s[k]: ans = min (ans,getdp(i+1,k)+getdp(k+1,j)) dp[i,j]=ans return dp[i,j] return getdp(0,len(s)-1)

题解

区间dp主要的思想就是要明白,二维的dp解决不了问题了,一定要引入多一次的循环,为什么二维dp解决不了了呢? 对于此问题,dp数组的值表示i到j 的最小解,那么此解只有两个答案, 要么是i+1到j的解+1,及新增的字母不在i+1到j中 要么是i+1到j的解 那么到底是哪个i+1到j 的字母打印了第i个字母是不确定的 所以应该多来一个循环, k从i到j 即三重循环

最新回复(0)