【HDOJ】1438 钥匙计数之一
2015-01-16 14:27
141 查看
状态压缩。分最后一个槽的值以及当前的配置方案是否可以进行DP。
/* 1438 */ #include <cstdio> #include <cstring> #include <cstdlib> #define MAXN 32 const int MAXS = 1<<4; __int64 dp[MAXN][MAXS][4][2]; int cnt[1<<4]; int abs(int x) { return x<0 ? -x:x; } int main() { int i, j, k, n; int s; __int64 ans; memset(cnt, 0, sizeof(cnt)); for (i=0; i<MAXS; ++i) for (j=0; j<4; ++j) if (i & (1<<j)) ++cnt[i]; memset(dp, 0, sizeof(dp)); for (i=0; i<4; ++i) dp[1][1<<i][i][0] = 1; for (n=2; n<MAXN; ++n) { for (i=0; i<MAXS; ++i) { for (j=0; j<4; ++j) { for (k=0; k<4; ++k) { s = i | (1<<j); dp [s][j][1] += dp[n-1][i][k][1]; if (abs(j-k) == 3) { dp [s][j][1] += dp[n-1][i][k][0]; } else { dp [s][j][0] += dp[n-1][i][k][0]; } } } } } for (n=2; n<MAXN; ++n) { ans = 0; for (i=0; i<MAXS; ++i) { if (cnt[i] >= 3) ans += dp [i][0][1] + dp [i][1][1] +\ dp [i][2][1] + dp [i][3][1]; } printf("N=%d: %I64d\n", n, ans); } return 0; }
相关文章推荐
- 递推—杭电1438 钥匙计数之一(待解决)
- HDU 1438 钥匙计数之一(状压DP->四维数组求满足要求的状态的方法数)
- hud 1438 钥匙计数之一
- HDOJ_1480 钥匙计数之二 解题报告(解密版)
- HDOJ_1480 钥匙计数之二 解题报告(…
- hdu1438 钥匙计数一
- HDU-1438 钥匙计数之一
- HDU 1438 钥匙计数之一 递推+组合 简洁的做法
- hdu1438 钥匙计数之一
- hdu 1438钥匙计数
- 杭电1438 钥匙计数一
- hdu 1438 钥匙计数之一(DP状态压缩)
- 钥匙计数之一 - HDU 1438(状态压缩打表)
- HDU - 1438:钥匙计数之一
- hdu 1438 钥匙计数之一(DP状态压缩)
- HDOJ_1480 钥匙计数之二 解题报告(解密版)
- hdu 1438 - 钥匙计数之一
- hdu 1438 钥匙计数1
- hdu-1438 钥匙计数之一
- [HDOJ5925]Coconuts(BFS,离散化,计数)