[PYTHON] Lernen mit ABC173C (Bit-Vollsuche, Kopieren einer mehrdimensionalen Liste, eine Dimension einer mehrdimensionalen Liste)

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)

Bit vollständige Suche

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)

Kopie der mehrdimensionalen Liste

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

Eindimensionalisierung 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

Lernen mit ABC173C (Bit-Vollsuche, Kopieren einer mehrdimensionalen Liste, eine Dimension einer mehrdimensionalen Liste)
Suchen Sie nach dem Wert der Instanz in der Liste
Python Bit vollständige Suche
Bestätigen Sie die vollständige Suche
Vollbit-Suche mit Go
Vollbit-Suche mit Python
Mehrdimensionale Array-Initialisierung der Liste
[Python] Kopie einer mehrdimensionalen Liste
Einfache Bit-Vollsuche (Easy Set)
Liste der von conda installierten Pakete