結果
問題 | No.1598 4×4 Grid |
ユーザー | ygussany |
提出日時 | 2021-05-14 09:32:19 |
言語 | C (gcc 12.3.0) |
結果 |
AC
|
実行時間 | 226 ms / 4,000 ms |
コード長 | 1,148 bytes |
コンパイル時間 | 167 ms |
コンパイル使用メモリ | 30,464 KB |
実行使用メモリ | 113,196 KB |
最終ジャッジ日時 | 2024-07-01 14:25:42 |
合計ジャッジ時間 | 3,285 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 226 ms
113,152 KB |
testcase_01 | AC | 203 ms
113,196 KB |
testcase_02 | AC | 198 ms
113,024 KB |
testcase_03 | AC | 196 ms
113,136 KB |
testcase_04 | AC | 199 ms
113,024 KB |
testcase_05 | AC | 197 ms
113,144 KB |
testcase_06 | AC | 196 ms
113,024 KB |
testcase_07 | AC | 199 ms
113,196 KB |
testcase_08 | AC | 197 ms
113,152 KB |
testcase_09 | AC | 197 ms
113,092 KB |
ソースコード
#include <stdio.h> const int bit[17] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536}; int main() { int K; scanf("%d", &K); int i, j, k, l, m, bnd[65536] = {}, adj[16] = {2, 3, 3, 2, 3, 4, 4, 3, 3, 4, 4, 3, 2, 3, 3, 2}; long long dp[65536][217] = {}; for (k = 0; k < bit[16]; k++) { for (i = 0; i < 16; i++) { if ((k & bit[i]) == 0) continue; if (i / 4 > 0 && (k & bit[i-4]) == 0) bnd[k]++; if (i / 4 < 3 && (k & bit[i+4]) == 0) bnd[k]++; if (i % 4 > 0 && (k & bit[i-1]) == 0) bnd[k]++; if (i % 4 < 3 && (k & bit[i+1]) == 0) bnd[k]++; } } for (k = 0, l = 1, dp[0][0] = 1; k < bit[16]; k++, l++) { if (k > 0) for (j = 0; j < 16 && (k & bit[j]) == 0; j++) l--; for (i = 0; i < 16; i++) { if ((k & bit[i]) != 0) continue; for (j = 0; j <= 216; j++) { if (dp[k][j] == 0) continue; m = j + bnd[k^bit[i]]; if (m > 216) return -1; dp[k^bit[i]][m] += dp[k][j]; } } } /* long long ans = 0; for (i = 0; i <= K; i++) { printf("%lld ", dp[bit[16]-1][i]); ans += dp[bit[16]-1][i]; } */ printf("%lld\n", dp[bit[16]-1][K]); fflush(stdout); return 0; }