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

Pythonでコインマトリックスが消えることから得られる最大のコインを見つけるためのプログラム


各セル行列[r、c]がそのセルに存在するコインの数を表す2D行列があるとします。 matrix [r、c]からコインを拾うと、行(r --1)と(r + 1)のすべてのコインが消え、2つのセルのmatrix [r、c+1]と行列[r、c-1]。収集できるコインの最大数を見つける必要があります。

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

2 8 7 6
10 10 4 2
5 9 2 3

コイン8、6、9、3でセルを選択できるため、出力は26になり、合計は26になります。

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

  • 関数getmax()を定義します。これには時間がかかります
  • prev_max:=0
  • curr_max:=0
  • res:=0
  • arrの各numについて、実行します
    • temp:=curr_max
    • curr_max:=num + prev_max
    • prev_max:=tempとprev_maxの最大値
    • res:=resとcurr_maxの最大値
  • return res
  • メインの方法から次のようにします-
  • 行列が空の場合、
    • 0を返す
  • m:=行列の行数
  • n:=行列の列数
  • row_sum:=サイズmの配列で、0で埋めます
  • 0からm-1の範囲のiの場合、do
    • row_sum [i]:=getmax(matrix [i])
  • return getmax(row_sum)

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

def getmax(arr):
   prev_max, curr_max = 0, 0
   res = 0
   for num in arr:
      temp = curr_max
      curr_max = num + prev_max
      prev_max = max(temp, prev_max)
      res = max(res, curr_max)
   return res

def solve(matrix):
   if not matrix:
      return 0
   m, n = len(matrix), len(matrix[0])
   row_sum = [0 for _ in range(m)]
   for i in range(m):
      row_sum[i] = getmax(matrix[i])
   return getmax(row_sum)

matrix = [
   [2, 8, 7, 6],
   [10, 10, 4, 2],
   [5, 9, 2, 3]
]
print(solve(matrix))

入力

[
[2, 8, 7, 6],
[10, 10, 4, 2],
[5, 9, 2, 3]
]

出力

26

  1. Pythonで等しい行の最大数を取得するために列の反転数を見つけるプログラム?

    バイナリ行列があるとすると、指定された行列で任意の数の列を選択し、その列のすべてのセルを反転できます。セルの変換とは、セルの値を反転することを意味します。いくつかのフリップの後、すべての値が等しい行の最大数を見つける必要があります。したがって、マトリックスが次のような場合 0 0 0 0 0 1 1 1 0 出力は2になります。これは、最初の2列の値を変換した後、最後の2行の値が等しいためです。 これを解決するには、次の手順に従います。 x:=行列、m:=行数、n:=列数、r:=0 xの各要素iについて c:=0

  2. 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