BZOJ 1087: [SCOI2005]互不侵犯King
2016-07-24 13:41
281 查看
markdown还挺好用。。
状压DP
年代比较久远了。。今天都在填坑。。
f[i][j][k]大约是第i行,摆了j个子,最后一行状态为k的方案数
里面的那个list数组是表示本行的子无法互相攻击的方案
前一行和这一行无法互相攻击的条件是
(ki−1&ki=0)&&(ki−1>>1&ki=0)&&(ki−1<<1&ki=0)
同一行无法互相攻击的条件是
(ki>>1&ki=0)&&(ki<<1&ki=0)
就这些吧
状压DP
年代比较久远了。。今天都在填坑。。
f[i][j][k]大约是第i行,摆了j个子,最后一行状态为k的方案数
里面的那个list数组是表示本行的子无法互相攻击的方案
前一行和这一行无法互相攻击的条件是
(ki−1&ki=0)&&(ki−1>>1&ki=0)&&(ki−1<<1&ki=0)
同一行无法互相攻击的条件是
(ki>>1&ki=0)&&(ki<<1&ki=0)
就这些吧
#include<cstdio> #define g getchar() #define ll long long #define inf 0x3f3f3f3f using namespace std; inline ll read(){ ll x=0,f=1;char ch=g; for(;ch<'0'||ch>'9';ch=g)if(ch=='-')f=-1; for(;ch>='0'&&ch<='9';ch=g)x=x*10+ch-'0'; return x*f; } inline void out(ll x){ int a[25],t=0; if(x<0)putchar('-'),x=-x; for(;x;x/=10)a[++t]=x%10; for(int i=t;i;--i)putchar('0'+a[i]); if(t==0)putchar('0'); putchar('\n'); } inline int q(int x){ int ans=0; for(;x;x/=2)ans+=x%2; return ans; } int n,m,num; ll list[500],f[10][100][513],query[513]; int main(){ n=read();m=read(); for(int i=0;i<1<<n;++i){ if(((i<<1)&i)==0 && ((i>>1)&i)==0) list[++num]=i,f[1][query[i]=q(i)][i]=1; } for(int i=2;i<=n;++i) for(int j=1;j<=num;++j) for(int l=query[list[j]];l<=m;++l) if(f[i-1][l][list[j]]) for(int k=1;k<=num;++k){ int jj=list[j],kk=list[k]; if((((jj&kk)==0))&&((jj<<1)&kk)==0&&((jj>>1)&kk)==0) f[i][l+query[kk]][kk]+=f[i-1][l][jj]; } ll ans=0; for(int i=1;i<=num;++i){ ans+=f [m][list[i]]; } out(ans); return 0; }
相关文章推荐
- HDU1253 胜利大逃亡(BFS)
- android studio的使用之ADB无法启动
- Zend Studio 调试Zend Debugger和XDebug
- MyBatis增删改查
- FHIR的REST接口形式
- Spring 框架的设计理念与设计模式分析
- HDU1241 Oil Deposits
- Android最佳性能实践(四)——布局优化技巧
- DNS域名轮循业务监控
- CodeBlocks快捷键大全(附汉化教程及其文件)
- Java获取客户端IP地址-转
- HDU 3746 Cyclic Nacklace kmp算法
- 三十天完成一个Android项目(Android应用程序的构成)
- Android Service 服务的基本用法
- 文章标题
- 聊天界面
- SpringBoot学习笔记(3) Spring Boot 运行原理,自动配置
- Android最佳性能实践(三)——高性能编码优化
- Android最佳性能实践(二)——分析内存的使用情况
- HDU1237 简单计算器