def find_max_sum(arr): opt=[0]*len(arr) opt[0]=arr[0] opt[1]=max(arr[0],arr[1]) for i in range(2,len(arr)): opt[i]=max(opt[i-1],opt[i-2]+arr[i]) print(opt) return opt[-1] if __name__=='__main__': arr=[4,1,1,9,1] max_value=find_max_sum(arr) print(max_value)#15 ''' 动态规划问题(dynamic programming):https://www.bilibili.com/video/av18512769 给定一个数组,从数组中选择出若干个互不相邻的数字,使得所选择出来的数值之和最大 互不相邻指的是,可以间隔一个或者多个数字 递归出口: opt[0]=arr[0] opt[1]=max(arr[0],arr[1]) 思路:创建一个与arr数组长度相等的数组opt,数组中第i个位置的数值表示如果数组为从位置0到位置i的元素,所能求得的最大和 重叠子问题 arr数组中的每个元素有 yes/no 两种方式 问题转换为求出opt数组中的第 -1 个元素 出现重叠子问题时,采用递归方式则会降低运算速度 写出递归方程和递归出口,动态规划问题一般要写成非递归形式 递归方程:动态规划的状态方程 '''
动态规划(一)
最新推荐文章于 2023-08-29 22:28:21 发布