Python:求构成最大和的元素个数

输入一个列表,每个元素都是正数。从中选取部分元素,让他们的和最大。但相邻的两个元素不容许选取。例如:输入[14,3,27,4,5,15,1],选取14,27,15,总和56,这也是最大和,输出构成最大和元素的个数3。选取3,4,15,总和是22。选取3,27,15是不容许的,因为3和27是相邻的两个元素。

输入格式:
在一行中输入一个列表,如[14,3,27,4,5,15,1]。

输出格式:
对每一组输入,在一行中输出最大和的元素的个数。

输入样例:
在这里给出一组输入。例如:

[14,3,27,4,5,15,1]
输出样例:
在这里给出相应的输出。例如:
3


    l = input()[1:-1].split(',')
    print(l)
    l = [int(i) for i in l]
    l1 = l[::2]
    l2 = l[1::2]
    print(l1)
    print(l2)
    print(len(l1)) if sum(l1) > sum(l2) else print(len(l2))

一开始看错题了,我还考虑了负数的情况,负数的话就要用动态规划了。我第一次遇到是输入整个列表的,这样的话取列表之间的数字元素,所以要[1:-1]表示除去外面两个括号,然后通过“,”分割,那么就得到了数字列表,但里面的元素是str所以要转换成整型,都是正数的话当然全部选完最大,所以让元素索引为单数与索引为双数比较总和大小即可,谁大输出谁

动态规划:

import numpy as np
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]
arr = [14,3,27,4,5,15,1]
result = dp_opt(arr)
print(result)