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

C++での最大合計減少サブシーケンス


この問題では、N個の整数の配列arr[]が与えられます。私たちのタスクは、C++で最大合計減少サブシーケンスを見つけることです。

問題の説明

サブシーケンスが厳密に減少するように、配列から要素の最大合計を見つけます。

問題を理解するために例を見てみましょう

入力

arr[] = {3, 1, 6, 10, 5, 2, 9}

出力

17

説明

最大合計でサブシーケンスを減らすと、{10、5、2} =10 + 5 + 2 =17

ソリューションアプローチ

ここでは、動的計画法のアプローチを使用して解決策を見つけます。ここでは、インデックスiまでmaxSumを格納するmaxSum[]配列を作成します。次の式を使用して配列値を検索します

maxSum [i] =arr [i] + max(maxSum [0…(* i-1)])

最大合計は、配列maxSum[]の最大要素によって与えられます。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
int findMaxSumDecSubSeq(int arr[], int N){
   int maximumSum = 0;
   int maxSum[N];
   for (int i = 0; i < N; i++)
      maxSum[i] = arr[i];
   for (int i = 1; i < N; i++)
      for (int j = 0; j < i; j++)
         if (arr[i] < arr[j] && maxSum[i] < maxSum[j] + arr[i])
         maxSum[i] = maxSum[j] + arr[i];
   for (int i = 0; i < N; i++)
         if (maximumSum < maxSum[i])
            maximumSum = maxSum[i];
   return maximumSum;
}
int main(){
   int arr[] = { 5, 4, 100, 3, 2, 101, 1 };
   int N= sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum sum of decreasing subsequence is "<<findMaxSumDecSubSeq(arr, N);
   return 0;
}

出力

The maximum sum of decreasing subsequence is 106

  1. C ++のプレフィックス合計を使用したO(n)の最大サブ配列合計

    問題の説明 正の整数と負の整数の配列が与えられた場合、その配列の最大サブ配列の合計を求めます 例 入力配列が− {-12、-5、4、-1、-7、1、8、-3}の場合、出力は9 アルゴリズム 入力配列のプレフィックス合計を計算します。 Initialize− min_prefix_sum =0、res =-infinite i=0からnまでのループを維持します。 (nは入力配列のサイズです。) cand =prefix_sum [i] – mini キャンドの場合 がres(これまでのサブアレイの最大合計)より大きい場合は、resをcandで更新します。

  2. C++の配列の最大平衡合計

    問題の説明 配列arr[]が与えられます。 arr[]のインデックスiのサフィックス合計でもあるプレフィックス合計の最大値を見つけます。 例 入力配列が-の場合 Arr [] ={1、2、3、5、3、2、1}の場合、出力は次のように11になります- プレフィックス合計=arr[0..3] =1 + 2 + 3 + 5=11および サフィックスの合計=arr[3..6] =5 + 3 + 2 + 1 =11 アルゴリズム 配列をトラバースし、各インデックスのプレフィックスの合計を配列presum []に格納します。ここで、presum[i]はサブ配列arr[0..i]の合計を格納し