动态规划实例--数组不连续取数问题(python 实现)

问题:

给定一个长度为N的一维数组
举例:输入:[1,3,5,2,1,9,4,3,7]
取数规则:不允许取连续的两个数
求:这个数组在给定规则下取到数字的最大和是?
本例中,答案为:1+5+9+7=22

解题思路

新建一个与输入数组input_num大小相同的数组max_num
记max_num[i]为前i+1天的最大训练天数(因为数组第一项是max_num[0])
max_num[0]=input_num[0]
max_num[1]=max(input_num[0],input_num[1])
当i>1,
max_nums[i]= max(max_nums[i-1],max_nums[i-2]+input_num[i])
从头到尾遍历计算max_nums,则最终max_nums中的最后一项即为所求

代码实现(python 2.7)

input_raw=raw_input('please enter the array(array):\n').split()
input_array= [int(i) for i in input_raw]
global max_num
max_num=[0 for i in range(len(input_array))]
max_num[0]=input_array[0]
max_num[1]=max(input_array[0],input_array[1])
global array
array=input_array
def max_train_time(i):
    if i<2:
        pass
    else:
        max_num[i]= max(max_num[i-1],max_num[i-2]+array[i])
for i in range(2,len(array)):
    max_train_time(i)
print 'The max training time is:\n',max_num[-1]

程序实例测试

此处假设输入数组长度不小于3,否则此问题无意义

#instance1
please enter the array(array):
1 3 1
The max training time is:
3
#instance2
please enter the array(array):
2 5 4
The max training time is:
6
#instance3
please enter the array(array):
1 3 5 2 1 9
The max training time is:
15
#instance4
please enter the array(array):
1 3 5 2 1 9 4 3 7
The max training time is:
22
发布了51 篇原创文章 · 获赞 56 · 访问量 6万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览