[AtCoder] ABC165C Persönliche Notiz [Python]

ABC165 C - Many Requirements

Alle möglichen Sequenzen A werden von dfs durchsucht, um die maximale Punktzahl zu finden. Zeigen Sie zwei Beispielantworten

--Antwortbeispiel 1 - Implementieren Sie dfs mit rekursiver Funktion --calc Funktion Eine Funktion, die die Punktzahl aus der Sequenz A berechnet

--dfs Funktion Eine Funktion, die die maximale Punktzahl findet, während alle möglichen Sequenzen A mit dfs durchsucht werden. Wenn die Länge der Zahlenfolge A N ist, vergleichen Sie sie nach der Berechnung mit der höchsten Punktzahl und notieren Sie die höchste Punktzahl Wenn die Länge kleiner als diese ist, fügen Sie ein Element hinzu und wiederholen Sie den Vorgang, um die Bedingung der Sequenz A zu erfüllen. Rekursiv durch Hinzufügen von $ x = 1 $, wenn A eine leere Liste ist, andernfalls $ x $ von $ A [-1] \ leqq x \ leqq M $ zu A.

main.py


    #!/usr/bin/env python3
    def main():
        import sys

        def calc(A: list):
            score = 0
            for a, b, c, d in lst:
                if A[b - 1] - A[a - 1] == c:
                    score += d
            return score

        def dfs(A: list):
            nonlocal ans
            if len(A) == N:
                ans = max(ans, calc(A))
                return
            for v in range(A[-1] if A else 1, M + 1):
                A.append(v)
                dfs(A)
                A.pop()

        input = sys.stdin.readline

        N, M, Q = map(int, input().split())
        lst = [list(map(int, input().split())) for _ in range(Q)]

        ans = 0
        dfs([])
        print(ans)


    main()

--Antwortbeispiel 2- itertools.combinations_with_replacement (iterable, r) Durchsuchen Sie die Sequenz A vollständig mit itertools.combinations_with_replacement Gemäß der offiziellen Dokumentation ermöglicht itertools.combinations_with_replacement (iterable, r) aus der Eingabe iterable, dass jedes Element mehrmals angezeigt wird, und gibt einen Teilstring von Elementen der Länge r in einem Taple zurück.

test.py


  # itertools.combinations_with_replacement(iterable, r)Anwendungsbeispiel
  from itertools import combinations_with_replacement

  for pattern in combinations_with_replacement('ABCD', 2):
      print(pattern, end='')
  
  # AA AB AC AD BB BC BD CC CD DD

Mit der obigen Funktion kann die Antwort wie folgt geschrieben werden:

main.py


    #!/usr/bin/env python3
    def main():
        import sys
        from itertools import combinations_with_replacement

        input = sys.stdin.readline

        N, M, Q = map(int, input().split())
        lst = [list(map(int, input().split())) for _ in range(Q)]

        ans = 0
        for pattern in combinations_with_replacement(range(1, M + 1), N):
            res = 0
            pattern = list(pattern)
            for a, b, c, d in lst:
                if pattern[b - 1] - pattern[a - 1] == c:
                    res += d
            ans = max(ans, res)

        print(ans)


    main()

Referenz-URL

Recommended Posts

[AtCoder] ABC165C Persönliche Notiz [Python]
atCoder 173 Python
Hinweis: Python
Python-Notiz
# 2 Python-Anfänger fordern AtCoder heraus! ABC085C --Otoshidama
Python lernen note_002
Hinweis: Python-Dekorator
Python-Programmierhinweis
[Python] Lernnotiz 1
AtCoder ABC 174 Python
Python lernen note_004
[Persönlicher Hinweis] Scraping von Webseiten in Python3
Python lernen note_003
Ganz persönliche Notiz
Flask's persönliche Notiz # 2
[Hinweis] openCV + Python
Python für mich Q.A.
Python persönliche Notizen
Python-Anfängernotiz
AtCoder ABC 175 Python
Flask's persönliche Notiz # 1
Täglicher AtCoder # 36 mit Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Täglicher AtCoder # 53 in Python
Täglicher AtCoder # 33 in Python
Täglicher AtCoder # 7 in Python
[Anmerkung] zukünftige Aussage ~ Python ~
AtCoder # 24 jeden Tag mit Python
Täglicher AtCoder # 37 in Python
fehlende Ganzzahlen Python persönliche Notizen
Löse AtCoder 167 mit Python
AtCoder # 8 jeden Tag mit Python
[Hinweis] Datei lesen ~ Python ~
Täglicher AtCoder # 42 in Python
AtCoder Anfängerwettbewerb 180 Hinweis
Löse ABC146-C mit Python
Täglicher AtCoder # 21 mit Python
Täglicher AtCoder # 17 mit Python
[Python] Suche (itertools) ABC167C
Täglicher AtCoder # 38 in Python
Täglicher AtCoder # 54 in Python
AtCoder Regular Contest 106 Hinweis
Täglicher AtCoder # 15 in Python
Täglicher AtCoder # 47 mit Python
Täglicher AtCoder # 13 in Python
AtCoder Anfängerwettbewerb 182 Hinweis
Täglicher AtCoder # 45 mit Python
AtCoder # 30 jeden Tag in Python
Täglicher AtCoder # 40 mit Python
Python-Memorandum (persönliches Lesezeichen)
[Python] Suche (NumPy) ABC165C
AtCoder # 5 jeden Tag mit Python
Täglicher AtCoder # 28 in Python
Täglicher AtCoder # 39 in Python
Automatische Übermittlung von AtCoder (Python)