选择最大总和M个元素,以便在C ++中连续重复不超过K
在这个问题中,我们给定数组arr[]以及两个整数M和K。我们的任务是使用给定数组的元素创建一个Array。新数组的大小应为M,且任何大于K的子数组不能使所有元素相同。我们必须打印所创建数组可能的最大和。
让我们以一个例子来了解问题
输入−arr[]={1,2,4,5,7},M=5,K=2
解释-创建满足条件{7,7,5,5,7,7}的数组。此处,大小不超过2的子数组都不能具有所有相同的元素。
为了解决这个问题,我们需要使用具有最大值的元素创建一个数组。但是我们不能使用max元素超过k次,因此在k次之后,我们将不得不使用数组的第二个max元素。在数组中每k个最大值之后插入一秒钟的最大值,并创建一个M长度的数组。最终输出将是此数组所有元素的总和。
示例
显示我们解决方案实施情况的程序,
#include <iostream> using namespace std; long int arraySum(int arr[], int n, int m, int k){ int max1 = arr[0], max2 = arr[0]; for (int i = 1; i < n; i++) { if (arr[i] > max1) { max2 = max1; max1 = arr[i]; } else if (arr[i] > max2) max2 = arr[i]; } int max2count = m / (k + 1); long int sum = max2count * max2 + (m - max2count) * max1; return sum; } int main() { int arr[] = { 1, 3, 6, 7, 4, 5 }; int n = sizeof(arr) / sizeof(arr[0]); int m = 9, k = 2; cout<<"The maximum sum of array created from the given array such that no subarray of size greater than "<<k<<" will have same elements is "; cout<<arraySum(arr, n, m, k); return 0; }
输出结果
The maximum sum of array created from the given array such that no subarray of size greater than 2 will have same elements is 60