BZOJ1087 [SCOI2005]互不侵犯King 状压DP
2017-11-14 20:46
218 查看
参考自き
9*9的棋盘问能放多少k个国王的放置方法数。。
这种预处理状态间能否转移的做法还是第一次见(naive
不过用位运算判转移可能性在当状态大存不下没法预处理的时候也不算慢。。?
左右移位判重合挺巧妙的。。。
9*9的棋盘问能放多少k个国王的放置方法数。。
这种预处理状态间能否转移的做法还是第一次见(naive
不过用位运算判转移可能性在当状态大存不下没法预处理的时候也不算慢。。?
左右移位判重合挺巧妙的。。。
#include<stdio.h> #include<algorithm> #include<queue> #include<string.h> #include<math.h> #include<set> #include<map> #include<vector> #include<iomanip> #include<stack> using namespace std; #define ll long long #define ull unsigned long long #define pb push_back #define mem(a) memset(a,0,sizeof a) #define FOR(a) for(int i=1;i<=a;i++) #define sqr(a) (a)*(a) const int maxn=6e2+5; //1<<9 int n,k; ll ans; bool s[maxn],G[maxn][maxn]; //判状态是否合法,判能否邻行 int num[maxn]; //状态i有多少个1位 ll f[10][100][600]; //前i行放j个1,第i行状态为k int sum; //sum种状态 void pre_s(){ for(int i=0;i<sum;i++){ if((i&(i<<1))==0){ //本行没相邻 s[i]=true; int t=i,cnt=0; while(t){ cnt+=(t&1); t>>=1; } num[i]=cnt; f[1][cnt][i]=1; } } } void pre_G(){ for(int i=0;i<sum;i++){ if(!s[i])continue; for(int j=0;j<sum;j++){ if(!s[j])continue; if( (!(i&j)) && (!((i<<1)&j)) && (!((i>>1)&j)) )G[i][j]=true; } } } void dp(){ for(int i=2;i<=n;i++) for(int j=0;j<=k;j++) for(int now=0;now<sum;now++){ if(!s[now])continue; if(num[now]>j)continue; for(int fr=0;fr<sum;fr++){ if(!s[fr])continue; if(!G[fr][now])continue; if(num[fr]+num[now]>j)continue; f[i][j][now]+=f[i-1][j-num[now]][fr]; } } } int main(){ scanf("%d%d",&n,&k); sum=1<<n; pre_s(); pre_G(); dp(); for(int i=0;i<sum;i++){ if(!s[i])continue; ans+=f [k][i]; } printf("%lld\n",ans); }
相关文章推荐
- bzoj1087[SCOI2005][互不侵犯King] 状压DP
- BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP
- 【bzoj 1087】[SCOI2005]互不侵犯King 状压dp
- BZOJ 1087: [SCOI2005]互不侵犯King( 状压dp )
- [BZOJ1087][SCOI2005]互不侵犯King解题报告|状压DP
- [bzoj1087]: [SCOI2005]互不侵犯King(状压dp)
- bzoj 1087: [SCOI2005]互不侵犯King 状压dp
- 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)
- 【SCOI2005】互不侵犯king(状压Dp入门)
- BZOJ 1087 [SCOI 2005] 互不侵犯的king (状压DP)
- Bzoj 1087: [SCOI2005]互不侵犯King(状压DP)
- BZOJ 1087 SCOI2005 互不侵犯King 状压DP
- BZOJ 1087 [SCOI2005]互不侵犯King (状压DP)
- 【BZOJ1087】【SCOI2005】互不侵犯King(状压dp)
- [luoguP1896] [SCOI2005]互不侵犯King(状压DP)
- SCOI2005——互不侵犯King(状压DP)
- BZOJ 1087: [SCOI2005]互不侵犯King | 状压DP
- 【BZOJ】1087 [SCOI2005]互不侵犯King 状压DP(轮廓线DP)
- [Bzoj1083][SCOI2005]互不侵犯king(状压dp)
- BZOJ1087: [SCOI2005]互不侵犯King 题解【DP】【状压】