提出 #31278283
ソースコード 拡げる
# popcount は 2 進数 x の 1 の桁の数を数える自作関数
def popcount(x):
return bin(x).count("1")
MOD = 10 ** 9 + 7
n = int(input())
a = [list(map(int, input().split())) for i in range(n)]
dp = [0] * (1 << n)
# dp[i] = 男性 0, ..., popcount(i) - 1 と女性 i (2 進法) だけで popcount(i) ペア作る場合の数
dp[0] = 1
for i in range(1 << n):
p = popcount(i)
for j in range(n): # 男性 p - 1 と女性 j をペアにする
if (i >> j) & 1 == 0 or a[p - 1][j] == 0:
continue
dp[i] += dp[i - (1 << j)]
dp[i] %= MOD
print(dp[(1 << n) - 1])
提出情報
| 提出日時 | |
|---|---|
| 問題 | O - Matching |
| ユーザ | Pro_ktmr |
| 言語 | PyPy3 (7.3.0) |
| 得点 | 100 |
| コード長 | 623 Byte |
| 結果 | AC |
| 実行時間 | 1300 ms |
| メモリ | 90460 KiB |
ジャッジ結果
| セット名 | All | ||
|---|---|---|---|
| 得点 / 配点 | 100 / 100 | ||
| 結果 |
|
| セット名 | テストケース |
|---|---|
| All | 0_00, 0_01, 0_02, 0_03, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12 |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 0_00 | AC | 69 ms | 61840 KiB |
| 0_01 | AC | 50 ms | 62020 KiB |
| 0_02 | AC | 49 ms | 61836 KiB |
| 0_03 | AC | 1194 ms | 90068 KiB |
| 1_00 | AC | 62 ms | 61956 KiB |
| 1_01 | AC | 47 ms | 61948 KiB |
| 1_02 | AC | 1057 ms | 90036 KiB |
| 1_03 | AC | 1103 ms | 89984 KiB |
| 1_04 | AC | 1164 ms | 90308 KiB |
| 1_05 | AC | 1187 ms | 90460 KiB |
| 1_06 | AC | 1212 ms | 90216 KiB |
| 1_07 | AC | 1300 ms | 90200 KiB |
| 1_08 | AC | 1254 ms | 90144 KiB |
| 1_09 | AC | 1211 ms | 90372 KiB |
| 1_10 | AC | 1251 ms | 90348 KiB |
| 1_11 | AC | 1181 ms | 90324 KiB |
| 1_12 | AC | 1134 ms | 90360 KiB |