给定一个数组,可以从数组中取出下标不连续的任意个数,求可以取出的数的和的最大值,例如:给出数组A[]={1,2,2,5,3,4,3}可以取出的最大和为2+5+4=11。现再给定数组{3,9,7,5,1,3,1,2,7},能取出的数的和的最大值是24。 解析:典型的动态规划思想,设置一个辅助数组,大小和原数组的大小一样,辅助数组中值表示从原数组起始位置开始到当前下标位置截止的和最大值。比如说我们要求数组{3,9,7,5,1,3,1,2,7},辅助数组元素的值为{3,9,10,14,14,17,17,19,24}。我们如何求得辅助数组? 我们假设原数组为arr,辅助数组为data,首先设置辅助数组中data[0] = arr[0],data[1] = arr[1],假设我们当前要求的是data[i],我们已经求得i-1之前不连续任意个数的和的最大值了,我们用arr[i]和data数组中前i-2个数依次相加,如果大于当前最大值,则更新当前最大值,如果小于则继续遍历。直到遍历到第i-2个位置为止。代码如下:#include<iostream> #include<vector> using namespace std; int getMaxValue(vector<int> &arr) {
数组中取出下标不连续的任意个数,求取出的数的和的最大值
最新推荐文章于 2023-08-19 13:31:11 发布