Pythonで安全な距離を維持できるkの最大値を見つけるプログラム
バイナリ行列があるとします。ここで、0は空のセルを意味し、1は人がいるセルを意味します。 2つのセル間の距離は、x座標の差とy座標の差の最大値です。これで、セルからマトリックス内の各人までの距離が空の正方形であり、マトリックスの各辺がすべてk以上である場合、マトリックスは係数kで安全であると見なされます。安全にできる係数kの最大値を見つける必要があります。
したがって、入力が次のような場合
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 1 | 1 | 1 | 0 |
0 | 0 | 0 | 0 | 0 |
中央のセルでは、セルからグリッド内の各人までの距離が少なくとも1であるため、出力は1になります。
これを解決するには、次の手順に従います-
-
N:=Aのサイズ
-
M:=A [0]
のサイズ -
0からNの範囲のiの場合、実行
-
0からMの範囲のjについては、次のようにします
-
A [i、j]:=A [i、j] XOR 1
-
-
-
ans:=0
-
0からNの範囲のiの場合、実行
-
0からMの範囲のjについては、次のようにします
-
iとjがゼロ以外で、A [i、j]が1の場合、
-
A [i、j]:=1+最小値のA[i-1、j]、A [i、j-1]およびA [i-1、j-1]
-
ans =A [i、j]とansの最大値
-
-
-
-
return(ans + 1)/ 2
例
理解を深めるために、次の実装を見てみましょう-
class Solution: def solve(self, A): N = len(A) M = len(A[0]) for i in range(N): for j in range(M): A[i][j] ^= 1 ans = 0 for i in range(N): for j in range(M): if i and j and A[i][j]: A[i][j] = 1 + min(A[i - 1][j], A[i][j - 1], A[i - 1][j - 1]) ans = max(A[i][j], ans) return (ans + 1) // 2 ob = Solution() matrix = [ [0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 1, 0, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0], ] print(ob.solve(matrix))
入力
[ [0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 1, 0, 1, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0], ]
出力
1
-
Pythonで複数のコピーを取得することにより、ナップサック問題で取得できる最大値を見つけるプログラム
重みと値と呼ばれる同じ長さの2つのリストがあり、別の値容量もあるとします。ここで、weights[i]とvalues[i]は、i番目のアイテムの重みと値を表します。最大で容量の重みを取得でき、アイテムごとに任意の数のコピーを取得できる場合は、取得できる最大の価値を見つける必要があります。 したがって、入力が重み=[1、2、3]、値=[1、5、3]、容量=5のような場合、出力は11になります。 これを解決するには、次の手順に従います- 関数dp()を定義します。これにはi、kが必要です iがウェイトのサイズと同じである場合、 0を返す ans:=dp(i + 1、k) =weig
-
辞書で2番目に大きい値を見つけるPythonプログラム
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − 2つの整数が与えられているので、辞書に2番目に大きい値を出力する必要があります それでは、以下の実装の概念を見てみましょう- アプローチ1-負のインデックスによるsorted()関数の使用 例 #input example_dict ={"tutor":3, "tutorials":15, "point":9,"tutorialspoint":19} # sorting the given list and get the