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

与えられたシーケンスの最長増加部分列を見つけるためのC++プログラム


最長増加部分列は、1つの項目が前の項目よりも大きい部分列です。

ここでは、整数のセットから最長増加部分列の長さを見つけようとします。

Input: A set of integers. {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15}
Output: The length of longest increasing subsequence. Here it is 6.
The subsequence is 0, 2, 6, 9, 13, 15.

アルゴリズム

longestSubSeq(subarray、n)

入力 :サブ配列とサブ配列のサイズ。

出力 :最長増加部分列長。

Begin
   define array length of size n
   initially set 0 to all entries of length
      for i := 1 to n-1, do
         for j := 0 to i-1, do
            if subarray[j] < subarray[i] and length[j] > length[i], then
               length[i] := length[j]
      done
      increase length[i] by 1
   done
   lis := 0
   for i := 0 to n-1, do
      lis := maximum of lis and length[i]
   done
   return lis
End

サンプルコード

#include <iostream>
using namespace std;
int longestSubSeq(int subArr[], int n) {
   int length[n] = { 0 }; //set all length to 0
   length[0] = 1;    //subsequence ending with subArr[0] is 1
   for (int i = 1; i < n; i++) {    //ignore first character, second to all
      for (int j = 0; j < i; j++) {    //subsequence ends with subArr[j]
         if (subArr[j] < subArr[i] && length[j] > length[i])
            length[i] = length[j];
      }
      length[i]++; //add arr[i]
   }
   int lis = 0;
   for (int i = 0; i<n; i++) // find longest increasing subsequence
      lis = max(lis, length[i]);
   return lis;
}
int main() {
   int arr[] = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 };
   int n = 16;
   cout << "Length of Longest Increasing Subsequence is: " << longestSubSeq(arr, n);
   return 0;
}

出力

Length of Longest Increasing Subsequence is: 6

  1. チームメンバーのインデックスのシーケンスを見つけるためのC++プログラム

    n個の要素と数kの配列Aがあるとします。クラスにはn人の生徒がいます。 i番目の学生の評価はA[i]です。すべてのチームメンバーの評価が明確になるように、k人の学生でチームを形成する必要があります。不可能な場合は「不可能」を返し、そうでない場合はインデックスのシーケンスを返します。 したがって、入力がA =[15、13、15、15、12]のような場合; k =3の場合、出力は[1、2、5]になります。 ステップ これを解決するには、次の手順に従います- Define two large arrays app and ans and fill them with cnt := 0 n :=

  2. 与えられたグラフのブリッジエッジの数を見つけるためのC++プログラム

    n個の頂点とm個のエッジを含む重み付けされていない無向グラフが与えられたとします。グラフのブリッジエッジは、グラフを削除するとグラフが切断されるエッジです。与えられたグラフでそのようなグラフの数を見つける必要があります。グラフには、平行なエッジや自己ループは含まれていません。 したがって、入力がn =5、m =6、edges ={{1、2}、{1、3}、{2、3}、{2、4}、{2、5}、{3 、5}}の場合、出力は1になります。 グラフには、{2、4}のブリッジエッジが1つだけ含まれています。 これを解決するには、次の手順に従います- mSize := 100 Define an