1087: [SCOI2005]互不侵犯King

Time Limit: 10 Sec Memory Limit: 162 MB

Submit: 5333 Solved: 3101

[Submit][Status][Discuss]

Description

  在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上

左下右上右下八个方向上附近的各一个格子,共8个格子。

Input

  只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N)

Output

  方案数。

Sample Input

3 2

Sample Output

16

—————————————————————————————-

题解

一看数据范围就能猜出状压dp,dp[i][k][j]表示第i行,一共放了k个棋子,状态为j的方案数。
转移方程:
dp[i][k][j]+=dp[i-1][k-sum[j]][k]
sum[S]为状态S中1的个数。 初值为dp[0][0][0]=1;

代码

#include<bits/stdc++.h>
#define LL long long using namespace std; int n,K,sum[1<<10];
LL dp[15][105][1<<10],ans; inline int update(int x){
int cnt=0;
for(;x;x>>=1)
if(x&1) cnt++;
return cnt;
} int main(){
scanf("%d%d",&n,&K);
for(register int i=0;i<1<<n;i++)
sum[i]=update(i);
dp[0][0][0]=1;
for(register int i=1;i<=n;i++)
for(register int j=0;j<1<<n;j++)
if(!((j&(j<<1)) or (j&(j>>1)))){
for(register int k=0;k<1<<n;k++)
if(!(k&(k<<1) or k&(k>>1) or (k&j) or ((k<<1)&j)
or ((k<<1)&(j<<1)) or ((k>>1)&(j>>1)) or((k>>1)&j))
and sum[k]+sum[j]<=K){
for(register int o=sum[k]+sum[j];o<=K;o++)
dp[i][o][j]+=dp[i-1][o-sum[j]][k];
}
}
for(register int i=0;i<1<<n;i++)
ans+=dp[n][K][i];
cout<<ans<<endl;
return 0;
}

BZOJ 1087(SCOI 2005) 互不侵犯的更多相关文章

  1. BZOJ 1087:[SCOI2005]互不侵犯King(状压DP)

    [SCOI2005]互不侵犯King [题目描述] 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子 ...

  2. SCOI 2005 互不侵犯

    洛谷 P1896 [SCOI2005]互不侵犯 洛谷传送门 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一 ...

  3. 【BZOJ 1087】[SCOI2005]互不侵犯King

    Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包 ...

  4. 【58.75%】【BZOJ 1087】[SCOI2005]互不侵犯King

    Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3040  Solved: 1786 [Submit][Status][Discuss] Descri ...

  5. BZOJ 1084 (SCOI 2005) 最大子矩阵

    1084: [SCOI2005]最大子矩阵 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3560 Solved: 1779 [Submit][Sta ...

  6. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  7. bzoj 1087 [SCOI2005]互不侵犯King 状态压缩dp

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MB[Submit][Status][Discuss] Descripti ...

  8. 【BZOJ】【1087】【SCOI2005】互不侵犯King

    状压DP 我写的太水了……64ms才过,估计还有更好的做法,希望各位神犇不吝赐教>_<. 嗯这题很明显每一行都可以用一个2进制数表示放置方式的,(1表示放,0表示不放).然后预处理一下所有 ...

  9. BZOJ 1087 互不侵犯king

    Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. Input 只有一行,包 ...

随机推荐

  1. 格式化抽象本地地址(实战linux socket编程)

    格式化抽象本地地址传统AF_UNIX套接口名字的麻烦之一就在于总是调用文件系统对象.这不是必须的,而且也不方便.如果原始的文件系统对象并没有删除,而在bind调用时使用相同的文件名,名字赋值就会失败. ...

  2. Java中volatile关键字及其作用是什么?

    在 Java 多线程中如何保证线程的安全性?那我们可以使用 Synchronized 同步锁来给需要多个线程访问的代码块加锁以保证线程安全性.使用 synchronized 虽然可以解决多线程安全问题 ...

  3. delphi 键盘常用参数(PC端和手机端 安卓/IOS)

    常数名称(红色手机端) 十六进制值 十进制值 对应按键(手机端) Delphi编程表示(字符串型)_tzlin注 0 0 大键盘Delete键 #0 VK_LBUTTON 1 1 鼠标的左键 #1 V ...

  4. NX二次开发-UFUN创建B面UF_MODL_create_bsurf

    NX9+VS2012 #include <uf.h> #include <uf_modl.h> //创建一个B面 ;//U方向极数 ;//V方向极数 ;//U方向规则 ;//V ...

  5. NX二次开发-C++的vector排序去重用法

    #include <algorithm> //vector排序去重 sort( BoxNum.begin(), BoxNum.end()); BoxNum.erase(unique(Box ...

  6. xcode5 添加Build Phases脚本

    http://www.runscriptbuildphase.com/ 版权声明:本文为博主原创文章,未经博主允许不得转载.

  7. struts漏洞处理--老项目struts版本升级遇到的问题

    struts漏洞S2-016被扫描出,要求升级struts版本,查看生产struts版本2.0.12,该漏洞影响版本2.3.15以下,上网搜索,struts2.5以上的要求jdk1.7,由于项目过老, ...

  8. Java-Class-@I:org.junit.Test

    ylbtech-Java-Class-@I:org.junit.Test 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部 1. package org.junit; import ...

  9. Hadoop2.X主要模块默认端口及作用

    Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以及HTTP访问.而随着Hadoop周边组件的增多,完全记不住哪个端口对应哪个应用,特收集记录如 ...

  10. taskFactory

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...