刷题向》关于第一篇状压DP BZOJ1087 (EASY+)
这是本蒟蒻做的第一篇状压DP,有纪念意义。
这道题题目对状压DP十分友善,算是一道模板题。
分析题目,我们发现可以用0和1代表每一个格子的国王情况,
题目所说国王不能相邻放置,那么首先对于每一行是否合法的判断条件就出来了:就是对于情况X,如果X&(x<<1)==0,即为合法情况。
同理这样我们就可以得出每一行对于上一行是否合法的条件:(x&y)==0&&(x&(y<<1))==0&&(x&(y>>1))==0
得出这个结论之后就比较好处理了,枚举行数,当前行情况,上一行情况,以及国王个数情况。
在对于国王的个数的处理时,不能只考虑上一行自己的国王情况,还要考虑在上一行的情况下,还能有多少国王,这点在对于国王个数的处理时解决。
然后给出题目
escription
在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上
左下右上右下八个方向上附近的各一个格子,共8个格子。
Input
只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N)
Output
方案数。
Sample Input
Sample Output
- /**************************************************************
- Problem: 1087
- User: PencilWang
- Language: C++
- Result: Accepted
- Time:28 ms
- Memory:8828 kb
- ****************************************************************/
- #include<stdio.h>
- int n,k,num[];
- long long ans,f[][][];
- bool s[];
- int main()
- {
- scanf("%d%d",&n,&k);
- int ass=<<n;
- for(int i=;i<ass;i++)
- {
- if((i&(i<<))==)
- {
- int x=i,sb=;
- while(x){sb+=(x&);x>>=;}
- num[i]=sb;s[i]=true;
- f[][num[i]][i]=;
- }
- }
- for(int i=;i<n;i++)
- {
- for(int x=;x<ass;x++)
- {
- if(s[x])
- for(int y=;y<ass;y++)
- {
- if(s[y])
- {
- if((x&y)==&&((x>>)&y)==&&((x<<)&y)==)
- for(int z=num[x];z+num[y]<=k;z++)
- f[i+][z+num[y]][y]+=f[i][z][x];
- }
- }
- }
- }
- for(int i=;i<ass;i++)
- {
- ans+=f[n][k][i];
- }
- printf("%lld",ans);
- return ;
- }
1087
刷题向》关于第一篇状压DP BZOJ1087 (EASY+)的更多相关文章
- [NOI2001]炮兵阵地 【状压DP】
#\(\color{red}{\mathcal{Description}}\) \(Link\) 司令部的将军们打算在\(N \times M\)的网格地图上部署他们的炮兵部队.一个\(N \time ...
- Codeforces Round #531 (Div. 3) F. Elongated Matrix(状压DP)
F. Elongated Matrix 题目链接:https://codeforces.com/contest/1102/problem/F 题意: 给出一个n*m的矩阵,现在可以随意交换任意的两行, ...
- 状压dp之二之三 炮兵阵地/玉米田 By cellur925
一.简单的状压dp 玉米田 题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ ...
- T2988 删除数字【状压Dp+前缀和优化】
Online Judge:从Topcoder搬过来,具体哪一题不清楚 Label:状压Dp+前缀和优化 题目描述 给定两个数A和N,形成一个长度为N+1的序列,(A,A+1,A+2,...,A+N-1 ...
- 洛谷P2761 软件补丁问题(状压dp)
传送门 啊咧……这题不是网络流二十四题么……为啥是个状压dp…… 把每一个漏洞看成一个状态,直接硬上状压dp 然后因为有后效型,得用spfa //minamoto #include<iostre ...
- FZU - 2218 Simple String Problem(状压dp)
Simple String Problem Recently, you have found your interest in string theory. Here is an interestin ...
- P3694 邦邦的大合唱站队 (状压DP)
题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶像. 现在要求重新安排队列,使来自同一 ...
- 洛谷P2761 软件补丁问题(状压DP,SPFA)
题意 描述不清... Sol 网络流24题里面怎么会有状压dp?? 真是狗血,不过还是简单吧. 直接用$f[sta]$表示当前状态为$sta$时的最小花费 转移的时候枚举一下哪一个补丁可以搞这个状态 ...
- HDU 1074:Doing Homework(状压DP)
http://acm.hdu.edu.cn/showproblem.php?pid=1074 Doing Homework Problem Description Ignatius has just ...
随机推荐
- php curl请求。header头中添加请求信息
function get_data($key,$authorization,$url){ $headers = array( 'api-key:'.$key, 'authorization ...
- gcc编译 汇编 选项
gcc生成main.out的步骤分解:<blockquote>main.c-----(-S 编译)-------->main.s-------(-c 汇编)------->ma ...
- 在javascript中使用提示信息来熟悉当前的程序流程
最近,因为需要,开始了解javascript,这个对我来说是个新的东西,在分析现有程序的功能的时候,需要增加一些提示信息来帮助了解程序的处理流程.于是在网上了解了一下提示信息的使用和区别.在此整理一下 ...
- 分布式缓存之memcached--命令测试
1. 启动Memcache常用参数 -p <num> 设置TCP端口号(默认设置为: ) -U <num> UDP监听端口(默认: , 时关闭) -l <ip_addr& ...
- python函数返回值
2016-08-09 15:01:38 python函数返回值使用return语句,可以返回任意类型的数.如果return语句执行,它之后的所有语句都不再执行. def func(x,y): pri ...
- Socket通信简单实例(WCF调用Socket)
服务端: 控制台程序监听 /// <summary> /// Server /// </summary> class Program { static Socket serve ...
- 洛谷 P2879 [USACO07JAN]区间统计Tallest Cow
传送门 题目大意: n头牛,其中最高身高为h,给出r对关系(x,y) 表示x能看到y,当且仅当y>=x并且x和y中间的牛都比 他们矮的时候,求每头牛的最高身高. 题解:贪心+差分 将每头牛一开始 ...
- vue指令总结
new Vue({ el: "#box", // element(元素) 当前作用域 data:{ msg:" ...
- Grunt 新手一日入门
var sassStyle = 'expanded'; grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), sass: { out ...
- PHP Tools for VS2017 key/破解 [搬运]
看看结果 搬运地址 : (自己敲吧...) 这里面破解的只有一年 时间可以在文中提供的 ------------------------------------------------------- ...