Here are some interesting algorithmic problems related to dynamic programming
class Solution:
# @param {character[][]} matrix
# @return {integer}
def maximalSquare(self, matrix):
'''
54-18: 24 -> think about dp
18-32: 14 -> code dp
'''
return solution(matrix)
def solution(matrix):
newmatrix = []
for item in matrix:
newmatrix.append(list(item))
matrix = newmatrix
if len(matrix) == 0: return 0
matrix[0][0] = eval(matrix[0][0])
res = matrix[0][0]
# first line
m,n = len(matrix),len(matrix[0])
i=0
for j in xrange(1,n):
matrix[i][j] = eval(matrix[i][j])
if matrix[i][j] > res: res = matrix[i][j]
j=0
for i in xrange(1,m):
matrix[i][j] = eval(matrix[i][j])
if matrix[i][j] > res: res = matrix[i][j]
for i in xrange(1,m):
for j in xrange(1,n):
matrix[i][j] = eval(matrix[i][j])
if matrix[i][j] == 0:
continue
else:
curlist = [ matrix[i-1][j-1],matrix[i-1][j],matrix[i][j-1] ]
if min(curlist) == 0:
continue
else:
matrix[i][j] = matrix[i][j] + min(curlist)
if matrix[i][j] > res:
res = matrix[i][j]
if len(matrix) == 2: print matrix
return res**2