Как напечатать индекс / элементы, которые включены в конечную максимальную сумму несмежных элементов?

#python-3.x

#python-3.x

Вопрос:

В программе нахождения максимальной суммы несмежных элементов, как мы можем напечатать элементы / индексы элементов, которые учитываются в окончательной сумме. Итак, здесь я прилагаю свой код для этого. Я использую динамическое программирование.

Я получил правильный ответ, когда существует только одна возможность возникновения максимальной суммы, например, у нас есть -1, 2, 4, 5. Таким образом, результат будет равен 5 и 2.

 n = int(input())
    tickets = list(map(int,input().split()))
    incl = 0
    excl = 0
    max_list = []
    for i in range(len(tickets)): 
        if excl>incl:
            new_excl = excl 
        else:
            new_excl = incl 
        incl = excl   tickets[i]
        excl = new_excl 
        if excl > incl:
            if len(max_list)>1 and (max_list[len(max_list)-1] - max_list[len(max_list)-2])==1:
                del max_list[len(max_list)-2]
        else:
            max_list  = [i] 
    if excl>incl:
        print(excl,max_list)
    else:
        print(incl,max_list)
  

Но я не получаю ответов при вводе, подобном этому: 4, 5, 4, 3. В этом вводе есть две возможности: 4 4 и 5 3. Я хочу напечатать ту возможность, которая имеет более высокие цифры, чем другая, с правой стороны. Итак, в этом примере с правой стороны 4 > 3, поэтому должна быть напечатана возможность 4. Но я получил все элементы в списке.

Ответ №1:

Я должен решить эту проблему. Это проблема из квалификационного раунда techgig’s code gladiators. Я нахожу ответ на свою проблему, но в любом случае это решение не дает мне 100 баллов. Я не проверял это для многих тестовых случаев, но вы можете проверить это, и если это не удается, пожалуйста, сообщите, чтобы я мог понять, в чем проблема.

 from itertools import combinations
for i in range(int(input())):
    n = int(input())
    tickets = list(map(int,input().split()))
    incl = 0
    excl = 0
    max_list = []
    for i in range(len(tickets)): 
        if excl>incl:
            new_excl = excl 
        else:
            new_excl = incl 
        incl = excl   tickets[i]
        excl = new_excl 
        if excl > incl:
            if len(max_list)>1 and (max_list[len(max_list)-1] - max_list[len(max_list)-2])==1:
                del max_list[len(max_list)-2]
        else:
            max_list  = [i] 
    if excl>incl:
        s=excl
    else:
        s=incl
    a=[]
    if 1 in [abs(t-s) for s,t in zip(max_list,max_list[1:])]:
        for m in range(2,n):
            for n in list(combinations(max_list, m)):
                if sum(tickets[b] for b in n)==s:
                    a =[n]
        l=[]
        index=[]
        for m in a:
            l =[tickets[m[1]]]
            index =[m[1]]
        v = index[l.index(max(l))]
        for m in a:
            if v in m:
                ans = m
                break
        for d in list(reversed(ans)):
            print(tickets[d],end='')
        print()
    else:
        max_list.reverse()
        for d in max_list:
            print(tickets[d],end='')
        print()