C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++のn個の配列からの昇順要素の最大合計


このチュートリアルでは、n個の配列から昇順要素の最大合計を見つけるプログラムについて説明します。

このために、MサイズのN個のアレイが提供されます。私たちのタスクは、前の配列の要素が次の配列よりも小さくなるように、各配列から1つの要素を選択して、最大の合計を見つけることです。

#include <bits/stdc++.h>
#define M 4
using namespace std;
//calculating maximum sum by selecting
//one element
int maximumSum(int a[][M], int n) {
   for (int i = 0; i < n; i++)
      sort(a[i], a[i] + M);
   int sum = a[n - 1][M - 1];
   int prev = a[n - 1][M - 1];
   int i, j;
   for (i = n - 2; i >= 0; i--) {
      for (j = M - 1; j >= 0; j--) {
         if (a[i][j] < prev) {
            prev = a[i][j];
            sum += prev;
            break;
         }
      }
      if (j == -1)
         return 0;
   }
   return sum;
}
int main() {
   int arr[][M] = {
      {1, 7, 3, 4},
      {4, 2, 5, 1},
      {9, 5, 1, 8}
   };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << maximumSum(arr, n);
return 0;
}

出力

18

  1. C++で厳密に増加するサブアレイの最大合計を見つける

    n個の整数の配列があるとします。厳密に増加するサブ配列の最大合計を求めます。したがって、配列が[1、2、3、2、5、1、7]のような場合、合計は8になります。この配列には、厳密に増加する3つのサブ配列があります。これらは{1、2、3}、{2 、5}および{1、7}。最大合計サブ配列は{1、7}です。 この問題を解決するには、最大合計と現在の合計を追跡する必要があります。各要素arr[i]について、これがarr [i – 1]より大きい場合は、これを現在の合計に加算します。それ以外の場合、arr[i]は別のサブアレイの開始点です。したがって、現在の合計を配列として更新します。現在の合計を更新す

  2. C ++の配列内の非反復(個別)要素の合計を検索します

    要素が少ない配列Aがあるとします。配列内のすべての異なる要素の合計を見つける必要があります。したがって、A =[5、12、63、5、33、47、12、63]の場合、個別の要素の合計は160になります。重複する要素は、考慮されると単に無視されます。 順序付けされていないセットを使用して、この問題を効率的に解決できます。 1つのforループを実行し、どの値が最初に来るか、そのadd in sum変数をハッシュテーブルに格納し、次回はこの値を使用しないようにします。 例 #include<iostream> #include<unordered_set> using nam