首页
比赛
题库
课程
竞赛讨论区
登录
/
注册
去牛客
首页
>
[SCOI2005]互不侵犯KING
8条解析
开通博客写题解
回归梦想
发表于 2021-01-31 13:46:07
P1896 [SCOI2005]互不侵犯 题目: 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 题解: 需要知道前一行的情况,所以一行一行的放车记录每行的情况在本题中,不能存在相邻的1对于一行
展开全文
在刷题的单身狗很开心
发表于 2023-10-24 13:11:42
本题需要在N*N个棋盘里面摆放上K个国王,国王需要互不侵犯。那么从这个矩阵的角度来看(果断dfs[赞])(开玩笑的。 本题使用状压dp去求解,以每一层作为最外层遍历取走,对于每一层来说哪些格子上放的有国王就是1,没有放国王就是0,所以直接采用二进制去表示每一层的状态。 而到某一层为止到底
展开全文
瑜画
发表于 2020-08-09 11:23:30
状态压缩dp入门 首先一次搜索,确定哪些状态能行,对应的国王数量是多少,然后再把放置到第多少行,状态是什么,国王数量是多少对应的方案数算出来,这就需要先确定状态,再通过状态转移求解。 dp[i][j][k]表示第I行,状态j,k个国王并且去除掉相邻行的状态,再转移最后把n行k个国王,所有的状态方案数
展开全文
默默然诶
发表于 2022-07-14 19:47:20
#include <bits/stdc++.h> using namespace std; #define ll long long int n, k; int num[1000]; ll f[10][90][1000]; int calc(int x) { int cnt = 0;
展开全文
苟且的狮子
发表于 2021-03-16 19:17:12
状压dp 思路很明显,但是实现起来对我来说真难。 这里我就解读一下代码 首先我们定义了一个dp数组dp[i][j][k]表示,第i个状态,再第j行,之后要放置k个国王从第一行开始遍历 我们定义状态为,如果该位为1那么这一行中,我们在这里放置了一个国王否则我们不放置国王 我们可以先跑一下,预先把所有满
展开全文
佰谨
发表于 2022-04-30 10:54:52
我仍不理解 初始化dp[1][0][0]和初始化dp[0][0][0]的差别在哪 我与”苟且的狮子“的代码几乎一模一样,但是我必须用前者方式来初始化,而他要用后者方式来初始化。。。 #include<iostream> using namespace std; using ll = lo
展开全文
xhhhhhhhhh
发表于 2023-01-02 15:38:18
今天刚刚学状压DP先来了手入门哈哈哈,效率可能没有那么高。 dp的定义dp[i][t][k] 第 i 行状态为 t 且放置 KING 的数目为 k 的方案数。 遍历第i行的状态值t从0开始到((1 << N) - 1) 如果 (t << 1) & t不为0说明有kin
展开全文
Z_L_G
发表于 2025-07-02 10:08:51
题意 有一个N*N(N<10)的棋盘,其中需要放置K个国王,国王会攻击以他为中心的九宫格范围内的棋子,要是所有国王互不攻击,总共有多少种方案 思路 如果按顺序从上到下,从左到右,每次放置新的国王的时候都需要考虑它左边和上侧的国王,状态过于复杂难以描述 由于N不大可以考虑一行一行放置,这样
展开全文
查看本题
查看本题讨论
相关比赛
25022-2021秋季算法入门班第八章习题:动态规划2
进入比赛
25616-自我训练
进入比赛
28259-牛客竞赛动态规划专题班状压dp例题
进入比赛
28691-动态规划2
进入比赛
28847-WUT2021校内训练⑥
进入比赛
等你来战
查看全部
新疆大学2025年7月月赛(同步赛)
报名截止时间:2025-07-06 18:00
牛客周赛 Round 99
报名截止时间:2025-07-06 21:00
牛客练习赛142
报名截止时间:2025-07-11 21:30
2025年第一届上海师范大学程序设计竞赛(同步赛)
报名截止时间:2025-07-13 18:00
牛客周赛 Round 100
报名截止时间:2025-07-13 21:00
2025牛客暑期多校训练营1
报名截止时间:2025-07-15 17:00
2025牛客暑期多校训练营2
报名截止时间:2025-07-17 17:00
扫描二维码,关注牛客
意见反馈
下载牛客APP,随时随地刷题