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

Pythonで行列の空のセルを選択できる方法がいくつあるかを確認するプログラム


N x Nのバイナリ行列があり、0は空のセル、1はブロックされたセルであるとすると、すべての行とすべての列に少なくとも1つの選択されたセルがあるように、N個の空のセルを選択する方法の数を見つける必要があります。答えが非常に大きい場合は、結果mod 10 ^ 9 + 7

を返します。

したがって、入力が次のような場合

0
0
0
0
0
0
0
1
0

次の構成があるため、出力は4になります(xは選択されたセルです)-

Pythonで行列の空のセルを選択できる方法がいくつあるかを確認するプログラム

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

  • n:=行列のサイズ
  • 関数f()を定義します。これにはi、bsがかかります
  • i> =nの場合、
    • 1を返す
  • ans:=0
  • 0からnの範囲のjについては、
    • matrix [i、j]が0と同じで(2 ^ j AND bsが0と同じ)の場合、
      • ans:=ans + f(i + 1、bs OR 2 ^ j)
  • 回答を返す
  • メインのメソッド呼び出しからf(0、0)を返します

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

class Solution:
   def solve(self, matrix):
      n = len(matrix)

      def f(i, bs):
         if i >= n:
            return 1
         ans = 0
         for j in range(n):
            if matrix[i][j] == 0 and ((1 << j) & bs == 0):
               ans += f(i + 1, bs | (1 << j))
         return ans

      return f(0, 0)

ob = Solution()
matrix = [
   [0, 0, 0],
   [0, 0, 0],
   [0, 1, 0]
]
print(ob.solve(matrix))

入力

[  
[0, 0, 0],  
[0, 0, 0],  
[0, 1, 0] ]

出力

4

  1. 与えられた番号がPythonプログラムでフィボナッチ数であるかどうかを確認するにはどうすればよいですか?

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 数nが与えられたら、nがフィボナッチ数であるかどうかを確認します n番目のフィボナッチ数は前の2つのフィボナッチ数の合計であることは誰もが知っています。しかし、それらは漸化式以外の興味深い関係も提供します。 (5 * n2 + 4)または(5 * n2 – 4)が完全な正方形である場合に限り、数値は本質的にフィボナッチです。 このプロパティを使用して、数値がフィボナッチであるかどうかを確認します。 では、Pythonスクリプトの実装を見てみましょう- 例 import math # if x is p

  2. 与えられた数がフィボナッチ数であるかどうかをチェックする方法のためのPythonプログラム?

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 数nが与えられたら、nがフィボナッチ数であるかどうかを確認します n番目のフィボナッチ数は前の2つのフィボナッチ数の合計であることは誰もが知っています。しかし、それらは漸化式以外の興味深い関係も提供します。 (5 * n2 + 4)または(5 * n2 – 4)が完全な正方形である場合に限り、数値は本質的にフィボナッチです。 このプロパティを使用して、数値がフィボナッチであるかどうかを確認します。 では、Pythonスクリプトの実装を見てみましょう- 例 import math # if x is p