ABC173C ist eine Menge Lernen und wird für zukünftige Referenzzwecke nützlich sein, also anstelle eines persönlichen Memorandums.
ABC173C
import copy #Mehrdimensionale Liste, die nach Wert übergeben wird/Tiefe Kopie(Deep Copy): copy.deepcopy()zum
h, w, k = map(int, input().split())
grd = [list(i for i in input()) for _ in range(h)]
ans = 0
for i in range(2**h): #So wählen Sie eine Zeile 2**h Straße, mit ihnen
grd1 = copy.deepcopy(grd) #Nach Wert von grd/Tiefe Kopie(Deep Copy)
for i1 in range(h): # 2**h Straße ist h Ziffer, wenn in Binärzahl konvertiert, von denen i1 Ziffer
if i >> i1 & 1: # 「2**Welche Ziffer ist 1, wenn i von "i aus h Straßen" in eine Binärzahl umgewandelt wird
grd1[i1] = ['r'] * w
for j in range(2**w): #So wählen Sie eine Spalte aus 2**Auf der Straße, jth von ihnen
grd2 = copy.deepcopy(grd1) #Übergeben mit dem Wert von grd1/Tiefe Kopie(Deep Copy)
for j1 in range(w): # 2**Die w-Straße ist die w-Ziffer, wenn sie in eine Binärzahl umgewandelt wird, von der die j1-Ziffer
if j >> j1 & 1: # 「2**Welche Ziffer ist 1, wenn j von "jth von w Straßen" in eine Binärzahl umgewandelt wird
for n in range(h):
grd2[n][j1] = 'r'
if sum(grd2,[]).count('#') == k: # sum()Reduzieren Sie eine zweidimensionale Liste mit auf eine Dimension
ans += 1
print(ans)
Es gibt verschiedene Artikel über die Bit-Vollsuche, aber es ist im Allgemeinen schwierig für Anfänger und diejenigen, die nur Python verwenden können. Das Folgende ist für eine solche Person leicht zu verstehen, und es ist genau richtig zu verstehen, was zu tun ist, indem Sie zuerst eine vollständige Bit-Suche durchführen. Python de Algorithmus (Bit vollständige Suche)
Ich wollte mit "list.copy ()" und "list [:]" schreiben, um Objekte zu zerstören und nicht zu zerstören, aber es funktionierte nicht wie erwartet (im obigen Code). Ich war in Schwierigkeiten (als grd
ungewollt umgeschrieben wurde).
Es gibt zwei Arten von Kopien: Übergeben als Referenz / flache Kopie (flache Kopie) und Übergeben als Wert / tiefe Kopie (tiefe Kopie), und die Kopierbibliothek "copy.copy ()" und "copy.deepcopy ()" verhalten sich insbesondere in mehrdimensionalen Listen. Ist anders.
Python - Doppelte Liste
[Python] Kopie einer mehrdimensionalen Liste
Dies ist nützlich, wenn Sie eine mehrdimensionale Liste wie dieses Problem zentral aggregieren möchten. Es scheint verschiedene Möglichkeiten zu geben, aber es gibt auch eine überraschende Verwendung von sum ()
.
Reduzieren (Reduzieren einer mehrdimensionalen Liste auf eine Dimension) mit Python
Recommended Posts