在查找非相邻元素的最大和的程序中,我们如何打印最终总和中考虑的元素的元素/索引。所以在这里我为此附加了我的代码。我正在使用动态编程。
当只有一种可能性出现最大总和时,我得到了正确的答案,例如我们有 -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()