动态规划实例--数组不连续取数问题(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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值