結果
問題 | No.1360 [Zelkova 4th Tune] 協和音 |
ユーザー |
![]() |
提出日時 | 2025-03-31 17:37:16 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 121 ms / 2,000 ms |
コード長 | 1,168 bytes |
コンパイル時間 | 254 ms |
コンパイル使用メモリ | 82,588 KB |
実行使用メモリ | 67,896 KB |
最終ジャッジ日時 | 2025-03-31 17:38:09 |
合計ジャッジ時間 | 6,759 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 47 |
ソースコード
n = int(input()) A = list(map(int, input().split())) B = [] for _ in range(n): B.append(list(map(int, input().split()))) sumA = [0] * (1 << n) sum_b = [0] * (1 << n) for mask in range(1, 1 << n): # Find the highest set bit i = mask.bit_length() - 1 if not (mask & (1 << i)): i = 0 while i < n and not (mask & (1 << i)): i += 1 previous_mask = mask ^ (1 << i) sumA[mask] = sumA[previous_mask] + A[i] sum_add = 0 j_mask = previous_mask while j_mask: lsb = j_mask & -j_mask j = (lsb).bit_length() - 1 sum_add += B[i][j] j_mask ^= lsb # Clear the least significant bit sum_b[mask] = sum_b[previous_mask] + sum_add max_total = -float('inf') best_mask = 0 for mask in range(1, 1 << n): current_total = sumA[mask] + sum_b[mask] if current_total > max_total: max_total = current_total best_mask = mask # Convert best_mask to the required output format result = [] for i in range(n): if best_mask & (1 << i): result.append(i + 1) # Convert to 1-based indexing print(max_total) print(' '.join(map(str, sorted(result))))