选择最大总和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