如何打印包含在非相邻元素的最终最大总和中的索引/元素



在查找非相邻元素的最大和的程序中,我们如何打印最终总和中考虑的元素的元素/索引。所以在这里我为此附加了我的代码。我正在使用动态编程。

当只有一种可能性出现最大总和时,我得到了正确的答案,例如我们有 -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 的可能性。但是我得到了列表中的所有元素。

我必须解决这个问题。这是技术吉格的代码角斗士资格赛的问题。我找到了问题的答案,但无论如何,这个解决方案并没有给我 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()

最新更新