hud 1438 钥匙计数之一
2014-03-06 21:03
127 查看
纯暴力状态压缩dp,很水。几个for循环莫名其妙的少了一次,调了一个小时。。。。真是db
#include <cstdio> #include <algorithm> #include <cstring> #include <cstdlib> #include <iostream> #include <cmath> using namespace std; typedef long long LL; #define INF 1000000007 #define N 1000 LL dp[40][16][2][4]; LL ans[50]; int num[20]; int main(){ memset(num, 0, sizeof(num)); for(int i = 0; i <= 15; i++){ num[i] = num[i >> 1] + (i & 1); } memset(dp, 0, sizeof(dp)); for(int j = 0; j < 4; j++){ dp[1][(1 << j)][0][j] = 1; } for(int i = 2; i <= 31; i++){ for(int j = 0; j < 16; j++){ for(int k = 0; k <= 1; k++){ for(int z = 0; z < 4; z++){ if(!dp[i - 1][j][k][z])continue; if(!(j & (1 << z)))continue; for(int l = 0; l < 4; l++){ dp[i][j | (1 << l)][k | (abs(l - z) >= 3)][l] += dp[i - 1][j][k][z]; } } } } } memset(ans, 0, sizeof(ans)); for(int i = 0; i <= 31; i++){ for(int j = 0; j < 16; j++){ if(num[j] < 3)continue; for(int k = 0; k < 4; k++){ ans[i] += dp[i][j][1][k]; } } for(int i = 2; i < 32; i++){ printf("N=%d: %I64d\n", i, ans[i]); } return 0; }
相关文章推荐
- 杭电1438 钥匙计数一
- hdu-1438 钥匙计数之一
- 钥匙计数之一 - HDU 1438(状态压缩打表)
- HDU 1438 钥匙计数之一(状压DP->四维数组求满足要求的状态的方法数)
- hdu1438 钥匙计数之一
- hdu 1438 钥匙计数1
- hdu 1438 钥匙计数之一(DP状态压缩)
- HDU 1438 钥匙计数之一 递推+组合 简洁的做法
- hdu 1438 钥匙计数之一(DP状态压缩)
- HDU - 1438:钥匙计数之一
- HDU-1438 钥匙计数之一
- 递推—杭电1438 钥匙计数之一(待解决)
- hdu 1438钥匙计数
- hdu1438 钥匙计数一
- hdu 1438 - 钥匙计数之一
- 【HDOJ】1438 钥匙计数之一
- hud 6052 2017 To my boyfriend Multi-University Training Contest - Team 2(计数)
- 递归加一些思考(钥匙计数之二)
- 钥匙计数之一
- hdu 1480 钥匙计数之二