首页 > 其他分享 >NC20240 [SCOI2005]互不侵犯KING

NC20240 [SCOI2005]互不侵犯KING

时间:2022-09-03 00:35:22浏览次数:88  
标签:KING 题目 int ll 一行 NC20240 num SCOI2005 dp

题目链接

题目

题目描述

在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。

国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子。

输入描述

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

输出描述

方案数。

示例1

输入

3 2

输出

16

题解

知识点:状压dp。

状压dp,不过规定要摆 \(k\) 个(这里我用变量 \(t\) 保存),因此要开一个状态表示放了几个。设 \(dp[i][j][k]\) 表示放到第 \(i\) 行,一共放了 \(j\) 个,上一行的状态是 \(k\) 。枚举 \(i,j,k\) 和上一行的上一行状态 \(l\) 。满足 j < num[k] || (k & (k << 1)) == 1 时 \(k\) 不合法,满足 (k & l) || ((k << 1) & l) || ((k >> 1) & l) == 1 时 \(l\) 不合法。有转移方程:

\[dp[i][j][k] = \sum_{l=0}^{2^n-1} dp[i - 1][j - num[k]][l]; \]

时间复杂度 \(O(nt\cdot 4^n)\)

空间复杂度 \(O(nt\cdot 2^n)\)

代码

#include <bits/stdc++.h>
#define ll long long

using namespace std;

ll dp[15][90][1 << 10];
int num[1 << 10];

int main() {
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int n, t; 
    cin >> n >> t;
    for (int i = 0;i <= (1 << n) - 1;i++) num[i] = __builtin_popcount(i);
    dp[0][0][0] = 1;
    for (int i = 1;i <= n;i++) {
        for (int j = 0;j <= t;j++) {
            for (int k = 0;k <= (1 << n) - 1;k++) {
                if (j < num[k] || (k & (k << 1))) continue;
                for (int l = 0;l <= (1 << n) - 1;l++) {
                    if ((k & l) || ((k << 1) & l) || ((k >> 1) & l)) continue;
                    dp[i][j][k] += dp[i - 1][j - num[k]][l];
                }
            }
        }
    }
    ll ans = 0;
    for (int i = 0;i <= (1 << n) - 1;i++) ans += dp[n][t][i];
    cout << ans << '\n';
    return 0;
} 

标签:KING,题目,int,ll,一行,NC20240,num,SCOI2005,dp
From: https://www.cnblogs.com/BlankYang/p/16651766.html

相关文章

  • KingbaseES sys_blocking_pids 函数
    会话出现了锁等待,想要快速查询到堵塞的会话,可以使用sys_blocking_pids函数来实现这一目的。sys_blocking_pids:获取哪些会话阻塞了某个会话(输入参数).sys_backend_pid:......
  • dubbo微服务链路追踪案例-skywalking
    zk10.0.0.7consumer10.0.0.13provider10.0.0.17skywalking10.0.0.4es10.0.0.2安装jdkwgethttps://download.oracle.com/java/18/latest/jdk-18_linux-x64_bin.......
  • 关于backingStore和updateRequest事件
    关于backingStore的同步从QWidgetBackingStore::sync说起,调用关系如下:QWidgetPrivate::syncBackingStore=>QWidgetBackingStore::sync=>QWidgetBacki......
  • SPOJ-GRAFFDEF King Graffs Defense
    KingGraffsDefensetarjan割边显然如果是割边的话,边两边的边双连通分量就不能连通因此考虑\(dfs\)搜索树中,计算出所有边双连通分量的大小,然后每个边双连通分量与其......
  • 应用性能监控:SkyWalking
    目录SkyWalking简介SkyWalking搭建平台后端(Backend)平台前端(UI)JavaAgent(Java应用监控)JavaAgent下载Java演练项目SkyWalking监控SkyWalking简介SkyWalking是一......
  • CCPC Qinhuangdao 2020 K, Kingdom's Power做题思路
    首先,对于一个子树,我们显然只有两种去让军队走过他的办法,一种是从兄弟节点调一些军队来,另一种是从根节点推过来。感觉有一个结论,就是我这个位置如果用兄弟节点推过来的只是......
  • CF992E Nastya and King-Shamans
    CF992ENastyaandKing-Shamans题目大意给定一个序列\(a_i\),记其前缀和序列为\(s_i\),有\(q\)个询问,每次单点修改,询问是否存在一个\(i\)满足\(a_i=s_{i-1}\),有......
  • scan chain masking in the compactor
    1.X-blocking 使用EDTcompactor压缩scanchain会导致X-blocking,compactor会将scanchain的observe值做异或运算,两条chain中的任意一条为X,edtchanneloutput都会......
  • tomcat实现链路追踪-skywalking
    下载软件包wgethttps://archive.apache.org/dist/tomcat/tomcat-8/v8.5.82/bin/apache-tomcat-8.5.82.tar.gzwgethttps://download.oracle.com/java/18/latest/jdk-18_......
  • halo博客实现链路追踪案例-skywalking
    es10.0.0.17skywalking10.0.0.2halo10.0.0.14先部署一个halo博客安装jdkyuminstalljava-11-openjdk-y下载halo博客jar包和skywalking-java-agent包wgethttp......