链接:https://www.luogu.org/problemnew/show/P1896

题意:

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

思路:

状压dp,dp[i][j][k]。表示。第i行,放j个国王,第j种状态的方法。

预处理第一行,dp。

枚举当前行和上一行的状态。

代码:

#include <iostream>
#include <memory.h>
#include <string>
#include <istream>
#include <sstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <map>
#include <queue>
#include <math.h>
#include <cstdio>
using namespace std;typedef long long LL;const int MAXN = 10;
const int STATES = 400;int states[STATES];
int num[STATES];
LL dp[MAXN][MAXN * MAXN][STATES];
int pos = 0;int Get_w(int n)
{int res = 0;while (n){if (n & 1)res++;n >>= 1;}return res;
}void Init(int w)
{int total = (1 << w);for (int i = 0;i < total;i++){if ((i & (i << 1)) == 0){states[++pos] = i;num[i] = Get_w(i);}}
}int main()
{int n, kk;scanf("%d%d", &n, &kk);Init(n);for (int i = 1;i <= pos;i++)dp[1][num[states[i]]][states[i]] = 1;for (int i = 2;i <= n;i++){for (int j = 1;j <= pos;j++)//当前行{for (int k = 1;k <= pos;k++)//上一行{if (states[j] & states[k] || (states[j] << 1) & states[k] || (states[j] >> 1) & states[k])continue;for (int x = 0;x <= kk - num[states[j]];x++)dp[i][num[states[j]] + x][states[j]] += dp[i - 1][x][states[k]];}}}LL res = 0;for (int i = 1;i <= pos;i++)res += dp[n][kk][states[i]];printf("%lld\n", res);return 0;
}

  

转载于:https://www.cnblogs.com/YDDDD/p/10360037.html

洛谷-P1896 [SCOI2005]互不侵犯相关推荐

  1. 洛谷P1896 [SCOI2005]互不侵犯 状压dp+位运算

    题目链接:https://www.luogu.org/problem/P1896 题意:n*n的格子填数,每个数填放位置的周围(8个)不能有其他的数 n<=9 ,矩形状压 f[i][j][s], ...

  2. luogu P1896 [SCOI2005]互不侵犯

    去tm插头dp 数据范围这么小,又要求,显然上dp 设\(f[i][j][k]\)表示放到第\(i\)行,总共放了\(j\)个那啥,第\(i\)行的格子状态为\(k\)的方案 先预处理出一行内状态的放 ...

  3. 状压DP【洛谷P1896】 [SCOI2005]互不侵犯

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

  4. BZOJ 1087: [SCOI2005]互不侵犯King

    二次联通门 : BZOJ 1087: [SCOI2005]互不侵犯King /*BZOJ 1087: [SCOI2005]互不侵犯King状压dp将每一行棋子的存在状态压成一个整数f[i][j][k] ...

  5. 信息学奥赛一本通 1392:繁忙的都市(city) | 洛谷 P2330 [SCOI2005]繁忙的都市

    [题目链接] ybt 1392:繁忙的都市(city) 洛谷 P2330 [SCOI2005]繁忙的都市 [题目考点] 1. 图论 最小生成树 [解题思路] 将题目叙述转为图论概念,交叉路口为顶点,道 ...

  6. 洛谷 P2327 [SCOI2005]扫雷

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P2327 [SCOI2005]扫雷 题目 题目描述 相信大家都玩过扫雷的游戏.那是在一个 n*m 的矩阵里面有一些雷,要你根据一些信 ...

  7. [T][3]洛谷 P2331 [SCOI2005] 最大子矩阵

    题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k(1≤n≤100,1≤m≤2 ...

  8. 洛谷 P2331 [SCOI2005]最大子矩阵

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P2331 [SCOI2005]最大子矩阵 题目 题目描述 这里有一个 n*m 的矩阵,请你选出其中 k 个子矩阵,使得这个 k 个子 ...

  9. 洛谷P1896 互不侵犯【状压DP】

    题目链接:P1896 互不侵犯 分析:普通的状压DP再多加一维记个数,然后找到能转移到当前的状态更新答案: #include<bits/stdc++.h> using namespace ...

最新文章

  1. MySQL番外篇:INT、CHAR以及VARCHAR数据类型中M的含义
  2. uva 10401 Injured Queen Problem(dp)
  3. npm ERR! code ELIFECYCLE
  4. Css中路径data用法
  5. 某些情况下安卓引入so冲突的解决
  6. (*长期更新)软考网络工程师学习笔记——Section 10 网络安全
  7. 【JavaScript】Uncaught TypeError: Illegal invocation
  8. 19. Python 类的重写   类的私有变量和私有方法
  9. 无锡东亭计算机培训班,锡山区东亭办公自动化培训、电脑培训班有哪些?
  10. 计算机的任务管理器作用,电脑技术:如何妙用任务管理器
  11. CentOS 使用shc加密脚本
  12. 【力扣刷题】121.买卖股票的最好时机(python)
  13. WSTMart 分销说明,三级分销与返利
  14. 基于Java毕业设计养老院信息管理源码+系统+mysql+lw文档+部署软件
  15. 360Lib:Lanczos插值
  16. 蓝懿iOS零基础学习之旅 感谢刘国斌老师
  17. actionscript(as) 项目中 使用 fla 加载 fla
  18. 【MATLAB】禁忌算法(TS)求解TSP问题
  19. JAVA 单张牌出牌逻辑 实现斗地主
  20. 如何把计算机软件卸载干净

热门文章

  1. C#进阶系列——WebApi 身份认证解决方案:Basic基础认证
  2. 102TimeStatistic
  3. MySQL与MongoDB之SQL语法对比
  4. nGrinder性能测试框架安装步骤
  5. 【转】关于 SELECT /*!40001 SQL_NO_CACHE */ * FROM 的解惑
  6. Sanboxie 5.14安装图解
  7. 让Redis在你的系统中发挥更大作用
  8. [练习]利用CSS steps 实现逐帧动画
  9. C Primer Plus (第五版) 第十章 数组和指针 编程练习
  10. 一种C#读写二进制文件的通用方法