Pythonでk個の異なる色でフェンスをペイントするための最小コストを見つけるためのプログラム
N個のフェンスの列をK個の異なる色でペイントするとします。隣接する2つのフェンスが同じ色にならないようにしながら、コストを最小限に抑えたいと考えています。したがって、n番目の行とk番目の列がk番目の色でn番目のフェンスをペイントするコストを表すN x Kマトリックスがある場合、この目標を達成するための最小コストを見つける必要があります。
したがって、入力が次のような場合
6 | 4 | 5 |
3 | 2 | 7 |
3 | 4 | 5 |
5 | 4 | 4 |
次のカラーインデックス(最初のフェンスから開始)を選択できるため、出力は14になります。-5→2→3→4。
これを解決するには、次の手順に従います-
-
n:=行列の行数
-
fc:=0、ft:=0
-
sc:=1、st:=0
-
行列の各行について、次のようにします
-
nfc:=-1、nft:=inf
-
nsc:=-1、nst:=inf
-
インデックスiと値tの行ごとに、次のようにします
-
ct:=t +(iがfcと同じでない場合はft、それ以外の場合はst)
-
ct <=nftの場合、
-
nsc:=nfc、nst:=nft
-
nfc:=i、nft:=ct
-
-
それ以外の場合、ct <=nstの場合、
-
nsc:=i、nst:=ct
-
-
-
fc:=nfc、ft:=nft
-
sc:=nsc、st:=nst
-
-
フィートを返す
例
理解を深めるために、次の実装を見てみましょう-
class Solution: def solve(self, matrix): n = len(matrix) fc, ft = 0, 0 sc, st = 1, 0 inf = int(1e18) for row in matrix: nfc, nft = -1, inf nsc, nst = -1, inf for i, t in enumerate(row): ct = t + (ft if i != fc else st) if ct <= nft: nsc, nst = nfc, nft nfc, nft = i, ct elif ct <= nst: nsc, nst = i, ct fc, ft = nfc, nft sc, st = nsc, nst return ft ob = Solution() matrix = [ [6, 4, 5], [3, 2, 7], [3, 4, 5], [5, 4, 4] ] print(ob.solve(matrix))
入力
[ [6, 4, 5], [3, 2, 7], [3, 4, 5], [5, 4, 4] ]
出力
14
-
Pythonでマージした後も、最小数の色を見つけるプログラムが残っています
色のリスト(R、G、B)があるとします。これで、2つの異なる色が隣り合っている場合、それらは3番目の色の単一の色のアイテムに変換できます。そのような変換の可能なシーケンスの後に残っているそれらの最小数を見つける必要があります。 したがって、入力がcolors =[G、 R、 G、 B、 R]の場合、以下のように変換できるため、出力は1になります- これを解決するには、次の手順に従います- n:=色のサイズ 色に異なる色が1つしかない場合は、 return n n <=1の場合、 return n x:=0 d:=キーと値のペアを持つマップ{( R、1)、(
-
Pythonで最小コストで都市を接続する
1からNまでの番号が付けられたN個の都市があるとします。接続があります。各接続[i]は[city1、city2、cost]で、これはcity1とcity2を接続するためのコストを表します。 。都市のすべてのペアに対して、これら2つの都市を接続する接続パス(おそらく長さ1)が存在するように、最小コストを見つける必要があります。コストは、使用された接続コストの合計です。タスクが不可能な場合は、-1を返します。 したがって、グラフが次のような場合- その場合、出力は6になります。任意の2つの都市を選択すると、すべての都市が接続されるため、最小の2、[1、5]を選択します。 これを解決する