动态规划
动态规划算法的核心就是记住已经解决过的子问题的解
记住求解的方式有两种:①自顶向下的备忘录法 ②自底向上
斐波那契数列问题
自顶向下
def fib_bp(n):
a,b = 1,1
c =0
for i in range(2,n):
c = a + b
a = b
b = c
return c
递归
def fibonacci(n):
if n==1 or n == 2:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(8))
Maximum Vlaue Continuous Subsequence
给定数组,寻找子数组使他们之和最大
# A[j] = max{A[j-1]+arr[j],arr[j]}
import numpy as np
import sys
def max_subseq(arr):
max_current = 0
max_so_far = -sys.maxsize
for i in range(0,len(arr)):
if max_current + arr[i] >= arr[i]:
max_current = max_current +arr[i]
else:
max_current = arr[i]
if max_so_far < max_current:
max_so_far = max_current
return max_so_far
print(max_subseq(np.array([-2,-3,4,-1,-2,1,5,-3])))