题目大意: 有n*n的棋盘上放k个国王。国王可以攻击与它相邻的八个格子。现在要使国王不相互攻击,有多少种放置的方案数。一个格子不能放两个国王。

n<=10,k<=n*n。

分析:简单的状态压缩DP。f[i][state][j]表示第i行放置国王的状态为state,前i行一共放了j个国王的方案数,state为位压缩表示的状态,某位为1,表示该处放了国王,为0表示没有放。合法的state状态数是有限的,所以,可以预处理出一行当中所有合法的state状态,保存在数组中。

f[i][p1][j]=∑(f[i-1][p2][j-cnts[state]]) {(state[p2]&state[p1])==0&&((state[p2]>>1)&state[p1]==0)&&((state[p2]<<1)&state[p1]==0)}

最后的答案即为∑f[n][j][k] {枚举j}

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,k,num=,s[],c[];
long long f[][][];
void dfs(int i,int state,int cnt)
{
if(i>=n)
{s[++num]=state;
c[num]=cnt;
return;
}
dfs(i+,state<<,cnt);
if(state&)return;
dfs(i+,(state<<)+,cnt+);
}
int main()
{
while(scanf("%d%d",&n,&k)!=-)
{
memset(f,,sizeof f);
num=;
dfs(,,);
for(int i=;i<=n;i++)
{
for(int j=;j<=num;j++)
{if(i==)f[i&][j][c[j]]=;
else
for(int p=c[j];p<=k;p++)
{
f[i&][j][p]=;
for(int x=;x<=num;x++)
{
if(c[x]+c[j]<=p&&(s[x]&s[j])==&&((s[x]&(s[j]<<))==)&&((s[x]&(s[j]>>))==))
f[i&][j][p]+=f[!(i&)][x][p-c[j]];
}
}
}
}
long long ans=;
for(int j=;j<=num;j++)
ans+=f[n&][j][k];
printf("%I64d\n",ans);
}
}

sgu233 little kings的更多相关文章

  1. POJ2699 The Maximum Number of Strong Kings

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2102   Accepted: 975 Description A tour ...

  2. UESTC 1851 Kings on a Chessboard

    状压DP... Kings on a Chessboard Time Limit: 10000ms Memory Limit: 65535KB This problem will be judged ...

  3. POJ 2699 The Maximum Number of Strong Kings Description

    The Maximum Number of Strong Kings   Description A tournament can be represented by a complete graph ...

  4. 状压DP SGU 223 Little Kings

    题目传送门 /* 题意:n*n的矩阵,放置k个king,要求king互相不能攻击,即一个king的8个方向都没有另外的king,求方案个数 状态压缩DP:dp[i][num[j]][s] 代表在第i行 ...

  5. 【POJ2699】The Maximum Number of Strong Kings(网络流)

    Description A tournament can be represented by a complete graph in which each vertex denotes a playe ...

  6. POJ2699:The Maximum Number of Strong Kings(枚举+贪心+最大流)

    The Maximum Number of Strong Kings Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2488 ...

  7. kings(骑士)解题报告

    kings(骑士) Time Limit5000 ms    Memory Limit131072 KBytes Description 用字符矩阵来表示一个8x8的棋盘,'.'表示是空格,'P'表示 ...

  8. 【POJ2699】The Maximum Number of Strong Kings(二分,最大流)

    题意: 有n个队伍,两两都有比赛 知道最后每支队伍获胜的场数 求最多有多少队伍,他们战胜了所有获胜场数比自己多的队伍,这些队伍被称为SK N<=50 思路:把每个队伍和它们两两之间的比赛都当做点 ...

  9. 【poj2699】 The Maximum Number of Strong Kings

    http://poj.org/problem?id=2699 (题目链接) 题意 给出1张有向完全图.U->V表示U可以打败V并得一分.如果一个人的得分最高,或者他打败所有比自己得分高的人,那么 ...

随机推荐

  1. UI学习笔记---第六天

    UIControl及其子类 UISegmentedControl的用法 UISegmentedControl是iOS中得分段控件,每个segment都能被点击,相当于集成了若干个button.通常我们 ...

  2. jsonp跨域请求数据实例——手机号码查询

    前言 网上有很多开放的api,我们在本地通过ajax获取数据时,总会碰到一个问题,那就是跨域!如果不借助php等,仅仅通过js怎么解决跨域的问题呢?或许jsonp是个不错的选择. 知识准备 上篇博客 ...

  3. Sprint第二个冲刺(第一天)

    因为人员变动关系,我们的博客推迟了两天发布,希望老师能够谅解. 现在“广商百货”团队项目的新的团队成员组成为:董婷婷(组长).容杰龙.卓炜杰.袁文洪和吴建明 在经过第一轮和几天的休息,现在我们准备开始 ...

  4. Zuoye for guo

      A  B  C  D  E  A  -  3  6  10  13  B  -  -  5  9  12  C  -  -  -  10  13  D  -  -  -  -  9  E  -  ...

  5. HTML 常见代码整合;

    html+css代码 文本设置 1.font-size: 字号参数 2.font-style: 字体格式 3.font-weight: 字体粗细 4.颜色属性 color: 参数 注意使用网页安全色 ...

  6. 准备开始自己搞企业管理软件,从openerp入手

    公司运行了半年多,人还比较少,只用了一些即时通讯工具,还有svn等基本的工具 记账用的是gnucash 其他的管理急需相应的软件,找了很长时间也没有合适的 想了想,还是从开源的openerp odoo ...

  7. 工作中遇到的问题--实现CustomerSetting的实时更新

    首先在项目运行时就初始化CustomerSettings的值,采用@Bean,默认是singtone模式,只会加载一次. @Configuration@Order(3)@EnableWebMvcSec ...

  8. JavaWeb学习记录(四)——日期和数字的格式转换

    一.Date转为String (1) public class DateUtil {    private static SimpleDateFormat sdf = new SimpleDateFo ...

  9. 安卓应用运营知识:VersionCode和VersionName

    本文转载于:http://blog.sina.com.cn/s/blog_580a227a0101bdzb.html 小米应用商店运营了大概半年了,过程中有喜有泪,我们在运营过程中,发现有的运营和商务 ...

  10. NodeJS记录

    https://nqdeng.github.io/7-days-nodejs/#3.3.4