up:正月点灯笼
test01 选出数组中不相邻位置的最大和值
python实现
//递归,O(2^N)
arr=[4,1,1,9,6]
def rec_opt(arr,i):
if i==0:
return arr[0]
elif i==1:
return max(arr[0],arr[1])
else:
A=rec_opt(arr,i-2)+arr[i]
B=rec_opt(arr,i-1)
return max(A,B)
rec_opt(arr,6)
//DP,O(N)
import numpy as np
arr=[4,1,1,9,6]
def dp_opt(arr):
opt=np.zeros(len(arr))
opt[0]=arr[0]
opt[1]=max(arr[0],arr[1])
for i in range(2,len(arr)):
A=opt[i-2]+arr[i]
B=opt[i-1]
opt[i]=max(A,B)
return opt[len(arr)-1]
dp_opt(arr)
java实现
package dp;
/**
* 隔位置选出数组最大和值
* @author 90398
* https://www.bilibili.com/video/BV12W411v7rd
* up:正月点灯笼
*/
public