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

最大合計増加部分列| C++のDP-14


このチュートリアルでは、最大の合計増加部分列を見つけるプログラムについて説明します。

このために、N個の整数を含む配列が提供されます。私たちのタスクは、要素がソートされた順序になるように、最大​​合計に追加する配列から要素を取得することです

#include <bits/stdc++.h>
using namespace std;
//returning the maximum sum
int maxSumIS(int arr[], int n) {
   int i, j, max = 0;
   int msis[n];
   for ( i = 0; i < n; i++ )
      msis[i] = arr[i];
   for ( i = 1; i < n; i++ )
      for ( j = 0; j < i; j++ )
         if (arr[i] > arr[j] &&
            msis[i] < msis[j] + arr[i])
            msis[i] = msis[j] + arr[i];
      for ( i = 0; i < n; i++ )
         if ( max < msis[i] )
            max = msis[i];
         return max;
}
int main() {
   int arr[] = {1, 101, 2, 3, 100, 4, 5};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "Sum of maximum sum increasing subsequence is "<<
   maxSumIS( arr, n ) << endl;
   return 0;
}

出力

Sum of maximum sum increasing subsequence is 106

  1. 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]の合計を格納し

  2. 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]は別のサブアレイの開始点です。したがって、現在の合計を配列として更新します。現在の合計を更新す