【BZOJ】1087 [SCOI2005]互不侵犯King 状压DP

来源:互联网 发布:淘宝网自助开通在哪里 编辑:程序博客网 时间:2024/05/22 10:55

狂刷状压DP

这已经是今天的第三题了呢

这是第一道自己独立完成的状压DP

二进制的状压学得差不多了呢


一遍AC的感觉好爽(虽然调试了好久)


RunIDUserProblemResultMemoryTimeLanguageCode_LengthSubmit_Time2358205FMM1087Accepted4276 kb64 msC++/Edit918 B2017-10-16 20:27:30

#include <cstdio>#define LL long longusing namespace std;int n,k;LL f[10][85][520],ans;bool Z(int x){return (x&(x<<1))==0?1:0;}bool N(int q,int w){return Z(q|w)&&((q&w)==0)?1:0;}int calc(int x){int tot=0;for (;x;x&=x-1) ++tot;return tot;}int main(void){scanf("%d%d",&n,&k);for (int i=0;i<=n;++i)f[i][0][0]=1;for (int i=1;i<=n;++i){for (int j=1;j<=k;++j){for (int t=0;t<(1<<n);++t){int cnt=calc(t);if (cnt>j) continue;if (!Z(t)) continue;for (int q=0;q<(1<<n);++q){if (N(t,q)) {f[i][j][t]+=f[i-1][j-cnt][q];f[i][j][t]=f[i][j][t];}}}}}for (int i=0;i<(1<<n);++i){ans+=f[n][k][i];}printf("%lld\n",ans);return 0;}



原创粉丝点击