[bzoj1087]: [SCOI2005]互不侵犯King(状压dp)
2017-09-30 12:24
513 查看
传送门
状压dp
O(2n)预处理出来一行的合法状态,然后构造dp转移方程:
fi,j,k表示第i行,此行状态为j,填了k个king时的方案数
则转移方程为:fi,j,k=∑fi−1,s,k−cnt(j)(j,s∈合法状态集合)好多细节我没写出来,自己看代码吧。
代码:
状压dp
O(2n)预处理出来一行的合法状态,然后构造dp转移方程:
fi,j,k表示第i行,此行状态为j,填了k个king时的方案数
则转移方程为:fi,j,k=∑fi−1,s,k−cnt(j)(j,s∈合法状态集合)好多细节我没写出来,自己看代码吧。
代码:
#include<bits/stdc++.h> #define ll long long using namespace std; inline int read(){ int x=0;char ch=' ';int f=1; while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar(); if(ch=='-')f=-1,ch=getchar(); while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*f; } int n,K; ll f[10][1001][100]; int all; int can[1001]; int tot[1001]; int cnt; int main(){ n=read();K=read(); all=(1<<n)-1; for(int s=0;s<=all;s++){ int flag=1; for(int i=0;i<n-1;i++){ if(s&(s>>1)){ flag=0; break; } } if(flag){ can[++cnt]=s; int ans=0; for(int i=0;i<=n-1;i++){ if((s>>i)&1)ans++; } tot[cnt]=ans; } } for(int s=1;s<=cnt;s++){ f[1][can[s]][tot[s]]=1; } for(int i=1;i<n;i++){ for(int j=1;j<=cnt;j++){ for(int k=1;k<=cnt;k++){ int s1=can[j]; int s2=can[k]; if((s1<<1)&s2)continue; if((s1>>1)&s2)continue; if(s1&s2)continue; for(int num=tot[j];num+tot[k]<=K;num++) f[i+1][s2][num+tot[k]]+=f[i][s1][num]; } } } ll ans=0; for(int i=1;i<=cnt;i++){ ans+=f [can[i]][K]; } printf("%lld",ans); return 0; }
相关文章推荐
- BZOJ 1087 SCOI2005 互不侵犯King 状压DP
- BZOJ 1087 [SCOI 2005] 互不侵犯的king (状压DP)
- BZOJ 1087 [SCOI2005]互不侵犯King (状压DP)
- bzoj1087 [SCOI2005]互不侵犯King(状压dp)
- BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP
- 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)
- 【bzoj1087】[SCOI2005]互不侵犯King 状压DP
- 【bzoj 1087】[SCOI2005]互不侵犯King 状压dp
- [BZOJ1087][SCOI2005]互不侵犯King解题报告|状压DP
- 【BZOJ】1087 [SCOI2005]互不侵犯King 状压DP(轮廓线DP)
- bzoj 1087: [SCOI2005]互不侵犯King 状压dp
- 【BZOJ1087】【SCOI2005】互不侵犯King(状压dp)
- BZOJ1087: [SCOI2005]互不侵犯King 题解【DP】【状压】
- BZOJ 1087: [SCOI2005]互不侵犯King 预处理,状压DP
- [BZOJ1087][SCOI2005]互不侵犯King(状压dp)
- bzoj 1087: [SCOI2005]互不侵犯King 状压dp
- BZOJ 1087: [SCOI2005]互不侵犯King | 状压DP
- BZOJ 1087: [SCOI2005]互不侵犯King( 状压dp )
- Bzoj 1087: [SCOI2005]互不侵犯King(状压DP)
- BZOJ题目1087: [SCOI2005]互不侵犯King(状态压缩DP)