結果
問題 | No.1345 Beautiful BINGO |
ユーザー |
![]() |
提出日時 | 2025-06-12 20:59:10 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,476 bytes |
コンパイル時間 | 172 ms |
コンパイル使用メモリ | 82,388 KB |
実行使用メモリ | 124,832 KB |
最終ジャッジ日時 | 2025-06-12 21:03:00 |
合計ジャッジ時間 | 4,579 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 5 TLE * 1 -- * 55 |
ソースコード
import sys import heapq def main(): N, M = map(int, sys.stdin.readline().split()) A = [] for _ in range(N): A.append(list(map(int, sys.stdin.readline().split()))) lines = [] # Rows for i in range(N): cells = set() total = 0 for j in range(N): cells.add((i, j)) total += A[i][j] lines.append((total, frozenset(cells))) # Columns for j in range(N): cells = set() total = 0 for i in range(N): cells.add((i, j)) total += A[i][j] lines.append((total, frozenset(cells))) # Diagonals cells = set() total = 0 for i in range(N): j = i cells.add((i, j)) total += A[i][j] lines.append((total, frozenset(cells))) cells = set() total = 0 for i in range(N): j = N - 1 - i cells.add((i, j)) total += A[i][j] lines.append((total, frozenset(cells))) all_lines = lines heap = [] visited = {} initial_mask = 0 initial_sum = 0 heapq.heappush(heap, (initial_sum, initial_mask)) visited[(initial_mask, 0)] = initial_sum min_total = float('inf') num_lines = len(all_lines) while heap: current_sum, current_mask = heapq.heappop(heap) k = bin(current_mask).count('1') if k >= M: if current_sum < min_total: min_total = current_sum continue if (current_mask, k) in visited and visited[(current_mask, k)] < current_sum: continue for i in range(num_lines): if not (current_mask & (1 << i)): new_mask = current_mask | (1 << i) new_k = k + 1 line_sum, line_cells = all_lines[i] combined_cells = set() for bit in range(num_lines): if new_mask & (1 << bit): combined_cells.update(all_lines[bit][1]) new_sum = sum(A[i][j] for (i, j) in combined_cells) state = (new_mask, new_k) if state in visited: if visited[state] <= new_sum: continue visited[state] = new_sum heapq.heappush(heap, (new_sum, new_mask)) print(min_total) if __name__ == "__main__": main()