BZOJ1087: [SCOI2005]互不侵犯King(状压DP)
2018-06-17 20:49:15来源:未知 阅读 ()
Submit: 5168 Solved: 3006
[Submit][Status][Discuss]
Description
在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上
左下右上右下八个方向上附近的各一个格子,共8个格子。
Input
只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N)
Output
方案数。
Sample Input
Sample Output
HINT
Source
$f[i][j][k]$表示前$i$行,第$i$行的状态为$j$,放了$k$个的方案
转移的时候枚举上一行的状态是什么
需要预处理出每一个状态的国王数
// luogu-judger-enable-o2 // luogu-judger-enable-o2 #include<cstdio> #define int long long using namespace std; const int MAXN = 10; //#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<22,stdin),p1==p2)?EOF:*p1++) char buf[1<<22],*p1=buf,*p2=buf; inline int read() { char c=getchar();int x=0,f=1; while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f; } int f[MAXN][1<<MAXN][MAXN*MAXN]; int N, K; int times[1<<MAXN],can[1<<MAXN]; int calc(int x) { int num = 0; for(int i = 0;i < N; i++) if( x & (1 << i) ) num++; return num; } main() { #ifdef WIN32 freopen("a.in","r",stdin); #endif //printf("%d %d %d\n",0<<1,0>>1,0); N = read(), K = read(); int Max = (1 << N) - 1; for(int i = 0;i < Max; i++) times[i] = calc(i), can[i] = (i & (i>>1)) == 0 ? 1 : 0; f[0][0][0] = 1; for(int i = 1;i <= N; i++) for(int j = 0;j < Max; j++) if(can[j]) for(int k = 0;k < Max; k++) if(((j & k) == 0) && ((j & (k << 1)) == 0) && ((j & (k >> 1)) == 0)) for(int l = times[j]; l <= K; l++) f[i][j][l] += f[i-1][k][l - times[j]]; int ans = 0; for(int i = 0;i <= Max; i++) ans += f[N][i][K]; printf("%lld", ans); return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:C/C++有效对齐值的确定
下一篇:C++11 作用域内枚举
- 洛谷 P2324 [SCOI2005]骑士精神 2019-08-16
- BZOJ1086: [SCOI2005]王室联邦(贪心,分块?) 2018-06-27
- P2327 [SCOI2005]扫雷 2018-06-17
- P2331 [SCOI2005]最大子矩阵 2018-06-17
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash