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

構成の数を数えるプログラムは、C++でドミノとトロミノで領域を埋めるためにあります


ドミノとトロミノの2つの形があるとします。ドミノは2x1の形で、トロミノは「L」のような形です。以下のように回転させることができます-

構成の数を数えるプログラムは、C++でドミノとトロミノで領域を埋めるためにあります

数がnの場合、2xnのボードにこれらの2つのタイプの部品を充填するための構成の数を見つける必要があります。タイリングで知っているように、すべての正方形はタイルで覆われている必要があります。

したがって、入力が3の場合、出力は5になります。したがって、配置は[XYZ XXZ XYYXXYXYY]と[XYZYYZXZZ XYY XXY]になります。ここでは、タイルごとに異なる文字が使用されます。

これを解決するには、次の手順に従います-

  • サイズN+5のdpという配列を作成し、dp [1]:=1、dp [2]:=2およびdp[3]:=5

    を設定します。
  • 4からNの範囲のiの場合

    • dp [i]:=2 * dp [i − 1] + dp [i − 3]

  • dp [N]

    を返します

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int add(int a, int b){
   return ((a % MOD) + (b % MOD)) % MOD;
}
class Solution {
   public:
   int solve(int N) {
      vector <int> dp(N + 5);
      dp[1] = 1;
      dp[2] = 2;
      dp[3] = 5;
      for(int i = 4; i <= N; i++){
         dp[i] = add(2 * dp[i − 1], dp[i − 3]);
      }
      return dp[N];
   }
};
main(){
   Solution ob;
   cout << (ob.solve(3));
}

入力

3

出力

5

  1. C++でのみ3と8の数字の数値に変換します

    このチュートリアルでは、数値を3桁と8桁のみに変換するプログラムについて説明します。 このために、乱数が提供されます。私たちの仕事は、数字から1を足したり引いたりするか、数字の数字を任意の数字に変換することによって、その数字を3と8だけに変換することです。 例 #include <bits/stdc++.h> using namespace std; //calculating minimum operations required int cal_min(long long int num){    //calculating remainder and o

  2. Pythonで3xnボックスを2x1ドミノで埋めることができる方法の数を数えるプログラム

    数nがあるとすると、(3 x n)ブロックを1x2ドミノで埋めることができる方法の数を見つける必要があります。必要に応じてドミノを回転させることができます。答えが非常に大きい場合は、このmod 10 ^ 9+7を返します。 したがって、入力がn =4の場合、出力は11になります。 これを解決するには、次の手順に従います- m =10 ^ 9 + 7 nが奇数の場合、 0を返す cs:=1、os:=0 2からnの範囲のiの場合、2ずつ増やします。 cs:=3 * cs + os os:=2 * cs + os return cs mod m 例(Pytho