結果
| 問題 |
No.1598 4×4 Grid
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2021-05-14 09:32:19 |
| 言語 | C (gcc 13.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 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 7 |
ソースコード
#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;
}