Apprentissage par ABC173C (recherche complète de bits, copie de liste multidimensionnelle, une dimension de liste multidimensionnelle)

ABC173C est beaucoup d'apprentissage et sera utile pour référence future, donc au lieu d'un mémorandum personnel.

ABC173C


import copy  #Liste multidimensionnelle passant par valeur/Copie profonde(Deep Copy): copy.deepcopy()pour

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):  #Comment choisir une rangée 2**h rue, avec eux
    grd1 = copy.deepcopy(grd)  #Par valeur de grd/Copie profonde(Deep Copy)
    for i1 in range(h):  # 2**h rue est un chiffre h lorsqu'il est converti en nombre binaire, dont i1 chiffre
        if i >> i1 & 1:  # 「2**Quel chiffre est 1 lorsque i de «ies rues sur h» est converti en nombre binaire
            grd1[i1] = ['r'] * w
    for j in range(2**w):  #Comment choisir une colonne 2**Sur w street, jth d'entre eux
        grd2 = copy.deepcopy(grd1)  #Passage par valeur de grd1/Copie profonde(Deep Copy)
        for j1 in range(w):  # 2**La rue w est le chiffre w converti en nombre binaire, dont le chiffre j1
            if j >> j1 & 1:  # 「2**Quel chiffre est 1 lorsque j de "jth of w rues" est converti en un nombre binaire
                for n in range(h):
                    grd2[n][j1] = 'r'
        if sum(grd2,[]).count('#') == k:  # sum()Aplatir une liste bidimensionnelle à une dimension avec
            ans += 1
print(ans)

recherche peu complète

Il existe divers articles sur la recherche complète de bits, mais c'est généralement difficile pour les débutants et ceux qui ne peuvent utiliser que Python. Ce qui suit est facile à comprendre pour une telle personne, et il est juste de comprendre ce qu'il faut faire en effectuant d'abord une recherche complète. Python de algorithme (recherche de bits complète)

Copie de la liste multidimensionnelle

J'avais l'intention d'écrire en utilisant list.copy () et list [:] avec l'intention de détruire et de ne pas détruire des objets, mais cela n'a pas fonctionné comme prévu (dans le code ci-dessus). J'étais en difficulté (quand grd a été réécrit involontairement). Il existe deux types de copie: passer par référence / copie superficielle (Shallow Copy) et passer par valeur / copie profonde (Deep Copy), et la bibliothèque de copie copy.copy () et copy.deepcopy () se comportent surtout dans les listes multidimensionnelles. Est différent. Python - Liste en double [Python] Copie de la liste multidimensionnelle

Unidimensionnement de la liste multidimensionnelle

Ceci est utile lorsque vous souhaitez agréger de manière centralisée une liste multidimensionnelle comme ce problème. Il semble y avoir plusieurs façons de le faire, mais il y a aussi une utilisation surprenante de sum (). Aplatir (aplatir une liste multidimensionnelle à une dimension) avec Python

Recommended Posts

Apprentissage par ABC173C (recherche complète de bits, copie de liste multidimensionnelle, une dimension de liste multidimensionnelle)
Rechercher par la valeur de l'instance dans la liste
recherche complète de bits python
Confirmer la recherche de bits complète
Recherche de bits complète avec Go
Recherche de bits complète avec Python
Initialisation de tableau multidimensionnel de la liste
[Python] Copie d'une liste multidimensionnelle
Recherche complète simplifiée (facile à régler)
Liste des packages installés par conda