我想在数字列表中找到序列,它返回最大总和。限制是它必须在每个 n 间隔。例如:
n = 4;
A = [1 4 3 2 9 8 7 6]
我的想法: 我知道这是一个动态编程问题。但是,我不确定如何从一个较小的问题来考虑它。希望这是有道理的。谢谢!
答案 0 :(得分:2)
如果所有数字都是非负数,则最好尽可能长地使子序列获得最大总和。区间限制意味着只有n
种可能性来选择起始索引。在示例中,您将获得以下四个:
1 9
4 8
3 7
2 6
计算每个的总和并选择最大值。
答案 1 :(得分:0)
您可以通过n 查看元素索引的余数,以将元素的子集中的元素除以另一个元素。然后总结每个子集的所有元素,你可以找到具有更高总和的那个元素。
可以很容易地找到此时的序列(原始数组中的索引,值)
我的意思是这样的(注意缩进)
n=lenght of the inteval;
group[n]=[]
sum[n]=[0,....,0];
for i=0,...,array.lenght-1
k=i%n;
insert the i-th element of the array in group[k];
for j=0,...,n-1
sum[j]=sum of all element in group[j];
max=0;
for k=0,...,n-2
if(sum[k]<sum[k+1])
max=k+1;
for u=0,...,group[max].lenght
index=u*max;
print (index, group[max][u])
我不确定这是你正在寻找的方法,但也许它可以帮到你。