from cmath import inf
class Solution:
def cost(self, s: str, low: int, high: int):
ss = list(s[low: high])
re_ss = ss[::-1]
cos = 0
for i in range(len(ss)):
if ss[i] != re_ss[i]:
cos += 1
return int(cos/2)
def palindromePartition(self, s: str, k: int) -> int:
dp = [[0] * (k+1) for _ in range(len(s) + 1)]
#dp[i][j] i: 0.. len(s) j: 0..k
for i in range(1, len(s) + 1):
for j in range(1, k + 1):
if i <= j:
continue
if j < 2:
dp[i][j] = self.cost(s, 0, i)
continue
minima = inf
for i0 in range(j-1, i):
if minima == inf:
minima = dp[i0][j-1] + self.cost(s, i0, i)
else:
minima = min(minima, dp[i0][j-1] + self.cost(s, i0, i))
dp[i][j] = minima
print(dp)
return dp[len(s)][k]