唔...今天学了状压就练练手...

点我看题

这题的话,我感觉算是入门题了QAQ...

然而我还是想了好久...

大致自己推出了方程,但是一直挂,调了很久选择了题解 坚持不懈的努力的调代码。

然后发现题解的方程和我一毛一样呀QAQ

然后就又开始无限调调调QAQ最后发现自己统计答案没放循环里...气哇QAQ看都之后哇的一声哭出来。

好吧进入正题吧。

设 f[i,j,k] 表示 放到第 i 行,第 i 行状态为 j 且总共放了 k 个的方案数。

然后方程就是  f[i,j,k+num[j]]+=f[i-1,x,k]

就是枚举一个 x 表示 第 i-1 层的状态,然后判其是否合法。

刚开始的时候懒的预处理,后来发现预处理代码更短就改了QAQ是的我是懒兔纸。

所以我萌预处理一个 num[i] 表示 状态为 i 中的 1 个数有多少个,也就是放了多少个国王。

顺便对于 不合法的状态 i 的num[i]=-1

然后对于枚举的每一个 x 直接暴力判 j 和 x 这两个状态合起来后是否合法。

暴力判的原因是我懒得预处理QAQ

然后 就枚举 k 表示 前 i-1 行已经放了 k 个国王。

辣么k+num[j] 就是第 i 行放完后的个数。

显然 k 的范围是 num[x]<=k<=m-num[j]

然后就愉快的水过去了,虽然wa了一次,因为longlong。

总的来说今天的状态压缩学得还不错=v=

  1. var
  2. i,j,k,x:longint;
  3. n,m:longint;
  4. f:array[..,..,..]of int64;
  5. ans:int64;
  6. num:array[..]of longint;
  7. function isnot(i,x:longint):boolean;
  8. begin
  9. exit(( << (i-))and x>);
  10. end;
  11. function ok(x:longint):longint;
  12. var i:longint;
  13. num:longint;
  14. begin
  15. num:=;
  16. for i:= to n do
  17. begin
  18. if isnot(i,x) and((i>)and isnot(i-,x)) then exit(-);
  19. if isnot(i,x) then inc(num);
  20. end;
  21. exit(num);
  22. end;
  23. function check(x,y:longint):boolean;
  24. var i:longint;
  25. begin
  26. for i:= to n do
  27. begin
  28. if isnot(i,x) then
  29. if ((i>)and(isnot(i-,y)))or(isnot(i,y))or((i<n)and(isnot(i+,y))) then exit(false);
  30. end;
  31. exit(true);
  32. end;
  33. begin
  34. read(n,m);
  35. f[,,]:=;
  36. for j:= to ( << n)- do
  37. num[j]:=ok(j);
  38. for i:= to n do
  39. for j:= to ( << n)- do
  40. begin
  41. if num[j]>= then
  42. begin
  43. for x:= to( << n)- do
  44. if (num[x]>=)and(check(j,x)) then
  45. begin
  46. for k:=num[x] to m do
  47. if k+num[j]<=m then
  48. inc(f[i,j,k+num[j]],f[i-,x,k]);
  49. end;
  50. end;
  51. if i=n then inc(ans,f[i,j,m]);
  52. end;
  53. writeln(ans);
  54. end.

bzoj1087

bzoj1087: [SCOI2005]互不侵犯King (codevs2451) 状压dp的更多相关文章

  1. BZOJ1087 SCOI2005 互不侵犯King 【状压DP】

    BZOJ1087 SCOI2005 互不侵犯King Description 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附 ...

  2. 状压入门--bzoj1087: [SCOI2005]互不侵犯King【状压dp】

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

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

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

  4. [Bzoj1083][SCOI2005]互不侵犯king(状压dp)

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

  5. 【BZOJ1087】[SCOI2005] 互不侵犯King(状压DP)

    点此看题面 大致题意: 在\(N×N\)的棋盘里面放\(K\)个国王,使他们互不攻击,共有多少种摆放方案(国王能攻击到它周围的8个格子). 状压\(DP\) 一看到这道题我就想到了经典的八皇后问题,但 ...

  6. 【BZOJ】1087: [SCOI2005]互不侵犯King(状压dp)

    http://www.lydsy.com:808/JudgeOnline/problem.php?id=1087 状压dp是第一次写啊,我也是才学TAT.状压dp一般都用一个值表示集合作为dp的一个状 ...

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

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

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

    题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子.n<=9 思路:状压dp,dp[i][ ...

  9. [luoguP1896] [SCOI2005]互不侵犯King(状压DP)

    传送门 先预处理出来一行中放置国王的所有情况和每种情况所用的国王个数. f[i][j][k]表示前i行放j个国王且最后一行的状态为k的方案数 状压DP即可 #include <cstdio> ...

随机推荐

  1. HDU_5533_Dancing Stars on Me

    Dancing Stars on Me Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Ot ...

  2. python基础-第十篇-10.1HTML基础

    htyper text markup language 即超文本标记语言 超文本:就是指页面内可以包含图片.链接,甚至音乐,程序等非文字元素 标记语言:标记(标签)构成的语言 网页==HTML文档,由 ...

  3. 原!linux 监控 jar定时任务 挂了重启 脚本

    #!/bin/bash time=$(date "+%Y-%m-%d %H:%M:%S") echo "monitor start at: ${time}" P ...

  4. Using virtual lists

    Download demo project - 15.7 Kb Contents Introduction Virtual list Creating a virtual list Add items ...

  5. 【我的Android进阶之旅】 RxJava 理解Backpressure并解决异常 rx.exceptions.MissingBackpressureException

    今天测试人员在测试应用APP的时候应用crash了,查看了下crash log如下所示: java.lang.IllegalStateException: Exception thrown on Sc ...

  6. Spring-BeanFactory容器

    Spring的BeanFactory容器 这是Spring中最简单地容器,它主要的功能是为依赖注入(DI)提供支持.这个容器接口在org.springframework.beans.factory.B ...

  7. 007-aven-assembly-plugin和maven-jar-plugin打包,java启动命令

    一.需求 打一个zip包,包含如下: bin为程序脚本,启动和停止 lib为依赖包 根目录下为配置文件和项目jar包 二.知识储备 2.1.插件了解 plugin function maven-jar ...

  8. 磁钉导航差速式AGV控制实验

    磁钉导航AGV实验 2016-03 本机器是采用RFID电子地标配合磁钉传感器的定位导航AGV.本AGV已初步实现里程计精确解算,磁钉数据融合,AGV定点精准停车.原地旋转换向.远程无线调度的功能,初 ...

  9. 使用Robomongo连接数据库不成功:没有启动MongoDB

    启动MongoDB ➜ ~ mongod --07T16:: I CONTROL [initandlisten] MongoDB starting : pid= port= dbpath=/data/ ...

  10. 基于Hadoop的数据仓库Hive

    Hive是基于Hadoop的数据仓库工具,可对存储在HDFS上的文件中的数据集进行数据整理.特殊查询和分析处理,提供了类似于SQL语言的查询语言–HiveQL,可通过HQL语句实现简单的MR统计,Hi ...