C++で増加するサブシーケンスの最大積
このチュートリアルでは、増加するサブシーケンスの最大積を見つけるプログラムについて説明します。
このために、整数の配列が提供されます。私たちのタスクは、任意の数の要素を持つ配列の任意のサブシーケンスの最大積を見つけることです。
例
#include <bits/stdc++.h>
#define ll long long int
using namespace std;
//returning maximum product
ll lis(ll arr[], ll n) {
ll mpis[n];
//initiating values
for (int i = 0; i < n; i++)
mpis[i] = arr[i];
for (int i = 1; i < n; i++)
for (int j = 0; j < i; j++)
if (arr[i] > arr[j] && mpis[i] < (mpis[j] * arr[i]))
mpis[i] = mpis[j] * arr[i];
return *max_element(mpis, mpis + n);
}
int main() {
ll arr[] = { 3, 100, 4, 5, 150, 6 };
ll n = sizeof(arr) / sizeof(arr[0]);
printf("%lld", lis(arr, n));
return 0;
} 出力
45000
-
C++での単語の長さの最大積
wordsという文字列配列があるとします。length(word [i])* length(word [j])の最大値を見つけます。ここで、2つの単語は共通の文字を共有しません。各単語には小文字のみが含まれると想定できます。そのような2つの単語が存在しない場合は、0を返します。したがって、入力が[“ abcw”、“ baz”、“ foo”、“ bar”、“ xtfn”、“ abcdef”]の場合、出力は16になります。 2つの単語は「abcw」、「xtfn」の場合があります。 これを解決するには、次の手順に従います- getRev()というメソッドを定義します。これはxを入力として受け
-
C++で最も長く増加するサブシーケンスの数
ソートされていない整数の配列が1つあるとします。最長増加部分列の数を見つける必要があるため、入力が[1、3、5、4、7]の場合、増加部分列は[1,3,5,7]であり、出力は2になります。 [1、3、4、7] これを解決するには、次の手順に従います- n:=num配列のサイズ、サイズnの2つの配列lenとcntを作成し、それらに値1を入力します。 lis:=1 1からnの範囲のiの場合 0からi–1の範囲のjの場合 nums [j]の場合、 len [i]の場合、len [i]:=len [j] + 1、およびcnt [i]:=cnt [j] それ以外の場合、len [j] +