C++の交差していない行
AとBの整数を(指定された順序で)2本の別々の水平線に書き込んだとします。ここで、接続線を描くことができます。つまり、-
のように2つの数A[i]とB[j]を接続する直線です。-
A [i] ==B [j];
-
他の接続(非水平)線と交差しない、描画する線。
接続線は端点でも交差できないことに注意する必要があります。各番号は1つの接続線にのみ属することができます。接続線の最大数を見つけます。したがって、入力が[1,4,2]や[1,2,4]の場合、出力は2になります。
1 | 4 | 2 |
1 | 2 | 4 |
図のように2本の交差していない線を描くことができます。これは、A [1]=4からB[2]=4までの線がA[2]=2からB[1]=2までの線と交差するためです。
これを解決するには、次の手順に従います-
-
Solve()というメソッドを定義します。これには、i、j、配列A、配列B、および行列dp
が必要です。 -
iが配列Aの範囲外の場合は、0を返します
-
jが配列Bの範囲外の場合は、0を返します
-
nj:=j
-
njではありません
-
njを1増やします
-
-
temp:=1(nj )
-
ret:=max of(solve(i + 1、j、A、B、dp)and temp)+ resolve(i + 1、nj + 1、A、B、dp)
-
dp [i、j]:=retおよびreturnret
-
メインメソッドから
-
n:=Aのサイズ、m:=Bのサイズ
-
サイズnxmの行列dpを作成し、これに– 1
を入力します。 -
呼び出しsolve(0、0、A 、、 dp)
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h> using namespace std; class Solution { public: int solve(int i, int j, vector <int>&A, vector <int>&B, vector < vector <int> >& dp){ if(i >= A.size()) return 0; if(j >= B.size()) return 0; if(dp[i][j] != -1) return dp[i][j]; int nj = j; while(nj < B.size() && B[nj] != A[i]) nj++; int ret = max(solve(i + 1, j, A, B, dp), (nj < B.size() ? 1 : 0) + solve(i + 1, nj + 1, A, B, dp)); return dp[i][j] = ret; } int maxUncrossedLines(vector<int>& A, vector<int>& B) { int n = A.size(); int m = B.size(); vector < vector <int > > dp(n, vector <int>(m, -1)); return solve(0, 0, A, B, dp); } }; main(){ vector<int> v1 = {1,4,2}; vector<int> v2 = {1,2,4}; Solution ob; cout << (ob.maxUncrossedLines(v1, v2)); }
入力
[1,4,2] [1,2,4]
出力
2
-
C++で配列内のクロスラインをカウントする
並べ替えられていない個別の要素の配列が提供されます。目標は、配列がソートされた後にクロスラインを見つけることです。クロスラインは以下のようにカウントされます- Arr []={1,2,4,3,5}以下に示すように3本の十字線があります Arr []={1,2,3,4,5}。配列はすでにソートされているため、クロスラインはありません。 挿入ソートを使用してクロスラインをカウントします。挿入ソートでは、右側の要素が左側の並べ替えられた要素に追加されます。ソートされたパーツに要素が追加されるたびに、正しい位置に移動するたびにカウントが増加します。それは、より大きいすべての
-
C++での2本の線の交点のプログラム
線ABに対応する点AとB、および線PQに対応する点PとQが与えられます。タスクは、これら2つの線の交点を見つけることです。 注 −点はX座標とY座標の2D平面で与えられます。 ここで、A(a1、a2)、B(b1、b2)およびC(c1、c2)、D(d1、d2)は、2つの異なる線を形成している座標であり、P(p1、p2)は交点です。 (交点の図解のためだけに) 交点を見つける方法 − 上の図を-としましょう 例 したがって、(a1、a2)、(b1、b2)、(c1、c2)、(d1、d2)を使用して、:A1 =b2 --a2B1 =a1 --b1C1 =(A1 * a1)+( B1 *