array1={6 -5 7 -3}
array2={2 3 -4}
根据题意,首先想到的暴力方法是按两个数组顺序构造一个长度为n的数组array(n=1,2,3,4.....),每个数组的和最大(题目要求选出这些数组的和中最大和)
以下是n等于1,2,3.....时的和最大的数组array以及它的和:
当n=1时:array={6},maxsum=6;
当n=2时:array={6,2},maxsum=8;
当n=3时:array={6,2,3},maxsum=11;
n=4:array={6,2,3,-4},maxsum=7;
n=5:array={6,2,-5,7},maxsum=10;
n=6:array={6,2,-5,7,3},maxsum=13;
n=7:array={6,2,-5,7,3,-3},maxsum=10;
n=8:array={6,2,-5,7,3,-3,-4},maxsum=6;
观察可发现上述任何一个array都是上述所给数组array1前m1个元素与array2前m2个元素的合成(其中m1+m2=n),其中题目其实只要求我们求输出最大的maxsum,对合成数组array并不关心;
所以我们观察maxsum的求法:array1前m1个元素与array2前m2个元素的合成(其中m1+m2=n)
其中m1+m2共有array1.size()*array2.size()种求法;
因此可以使用array1与array2的前缀和来简化
array1前缀和:6,1,8,5;
array2前缀和:2,5,1;
然后用两个for循环枚举array1.size()*array2.size()种情况;
#include<iostream>
#include<vector>
#include<map>
#inclu

文章讨论了一种计算两个数组元素组合最大和的方法,首先通过暴力枚举所有可能的组合,然后优化利用前缀和减少计算量,最终降低空间复杂度到只用一个变量。代码示例给出了C++实现。
最低0.47元/天 解锁文章
339

被折叠的 条评论
为什么被折叠?



