【codevs 2451】互不侵犯king 状压dp
2016-10-30 00:00
155 查看
学长说这是模板题……
貌似确实是……
算了QAQ
因为数组的原因让DQS帮我调了半天……QAQ果然dp不爽系列
貌似确实是……
算了QAQ
因为数组的原因让DQS帮我调了半天……QAQ果然dp不爽系列
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int MAXN = 1 << 11; long long dp[12][MAXN][100]; int n,king; int get_k(int x) { int ans = 0; for(int i = n;i >= 1;i --) if(x & (1 << i)) ans ++; return ans; } void print(int x) { for(int i = n;i >= 1;i --) cout<<( (x >> i) & 1); cout<<" "; } bool cannot(int x) { return (x & (x << 1)) && (x & (x >> 1)); } void dpdpd() { for(int i = 0;i < (1 << (n + 1));i ++) dp[1][i][get_k(i)] = 1; for(int i = 2;i <= n;i ++) { for(int l = 0;l < (1 << (n + 1));l ++) { if(cannot(l)) continue; for(int j = 0;j < (1 << (n + 1));j ++) { int us = get_k(j); if(cannot(j)) continue; if(!(l & 1) && !(j & 1) && !(j & l) && !(j & (l << 1)) && !(j & (l >> 1))) { for(int k = 0;k <= king - us;k ++) { dp[i][j][k + us] += dp[i - 1][l][k]; // print(l);print(j);printf("%d %d %d %d\n",i,dp[i-1][l][k],dp[i][j][k+us],k+us);puts(""); } } } } } return; } int main() { scanf("%d %d",&n,&king); dpdpd(); long long ans = 0; for(int i = 0;i < (1 << (n + 1));i ++) ans += dp [i][king]; printf("%lld\n",ans); return 0; }
相关文章推荐
- SCOI2005互不侵犯King 状压Dp
- [BZOJ1087][SCOI2005]互不侵犯King(状压dp)
- BZOJ 1087: [SCOI2005]互不侵犯King | 状压DP
- [luoguP1896] [SCOI2005]互不侵犯King(状压DP)
- BZOJ 1087: [SCOI2005]互不侵犯King 预处理,状压DP
- SCOI2005——互不侵犯King(状压DP)
- bzoj 1087: [SCOI2005]互不侵犯King 状压dp
- 【SCOI2005】互不侵犯king(状压Dp入门)
- 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)
- [BZOJ1087][SCOI2005]互不侵犯King解题报告|状压DP
- bzoj1087[SCOI2005][互不侵犯King] 状压DP
- 【BZOJ1087】【codevs2451】互不侵犯,状压DP
- 【codevs 2451】互不侵犯king 状压dp
- bzoj1087 [SCOI2005]互不侵犯King(状压dp)
- BZOJ 1087-互不侵犯King(状压DP)
- 【bzoj 1087】[SCOI2005]互不侵犯King 状压dp
- BZOJ1087 [SCOI2005]互不侵犯King 状压DP
- BZOJ1087(SCOI2005)[互不侵犯King]--状压DP
- 【BZOJ1087】【SCOI2005】互不侵犯King(状压dp)
- BZOJ1087 互不侵犯king(状压DP)