给定数组的匹配索引从1到n,因此元素的总和是最小的 我遇到了一个问题:我有三个相同长度的阵列(例如A,B,C),并且我需要选择成对不同的索引i,j,k,sum a_i + b_j + c_k是最小。我推论了...

问题描述 投票:0回答:0

a_i + b_j + c_k

总和是最小的。我推断,每个数组的至少三个元素可以包含在总和中,以使其最小。
例如,如果我们有两个元素的两个元素,则很简单。
最小值,最小值
a, b

如果他们处于不同的位置,那很好。
如果没有,我们比较
a

。如果是真的,我们会采用
    b
  1. a_next - a_min < b_next - b_min
    。如果没有,我们会服用
    b_min
  2. a_next
  3. 我无法为每个三个数量的三个数字制定算法,因为索引冲突可能重叠
    一个例子:
    a_min
    我想服用
    b_next
    (基于1),但我不能。 我将指针移至第三个指针,因为
     8 1 3 => a
    19 1 6 => b
    18 2 1 => c
    
    。 但是现在与
  4. a_2,b_2,c_3
发生了冲突,所以我必须将其移至第二个。 但是第二个已经占据了

a

,所以我将
3-1 < 6-1
移到第一个

c

结果是
(2-1 < 3-8)
,这是错误的,因为
b
会少
c
同样,当所有a_min,b_min,c_min处于同一位置时,我们也应该考虑情况。
我以为我被困了。 bruteforce
(18-2 < 19-1)
可以很容易地解决三个元素的三个数组的问题,但是我觉得如果我们开始谈论f.e。大约1000个数组。我认为双重指针是解决它的关键,但无法抓住它。
	
这是整数线性编程问题。  
https://en.wikipedia.org/wiki/integer_programming

LET
a_3 + b_2 + c_1
是选择Ath Array的ITH成员的价值
let
c_2 + a_1 + b_3

您想最大程度地减少x_a_i * v_a_i v_a_i for All a和i

对象to

(22 > 11)

...
    

algorithm dynamic-programming double-pointer
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.