首页 > TAG信息列表 > SCOI2005

NC20240 [SCOI2005]互不侵犯KING

题目链接 题目 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。 国王能攻击到它上下左右,以及左上 左下右上右下八个方向上附近的各一个格子,共8个格子。 输入描述 只有一行,包含两个数N,K ( 1 ≤ N ≤ 9, 0 ≤ K ≤ N * N) 输出描述 方案数。 示例1 输入 3 2

1041 [SCOI2005]繁忙的都市 kruskal 最小生成树

 链接:https://ac.nowcoder.com/acm/contest/26077/1041来源:牛客网 题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造。 城市C的道 路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个

NC20242 [SCOI2005]最大子矩阵

题目链接 题目 题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。 注意:选出的k个子矩阵 不能相互重叠。 输入描述 第一行为n,m,k(1 ≤ n ≤ 100,1 ≤ m ≤ 2,1 ≤ k ≤ 10), 接下来n行描述矩阵每行中的每个元素的分值(每个元素的分值的绝对值不超过

题解 [SCOI2005]王室联邦

之前树分块也只是听说,今天亲手学了一下(?)( 首先你会发现这个 \(B\) 和 \(3B\) 的约束就很迷(我也不知道为什么搞这种奇怪的约束(悲)),学了才知道。。。 所以这题的分块方法好像叫“王室联邦分块法”。 可还行~ 不吹水了,来口胡一波。 首先明确一点,任何一个省会一定是一群节点的祖先。 因此

1044 [SCOI2005]最大子矩阵 最大的k个区间 前缀和 线性DP

链接:https://ac.nowcoder.com/acm/contest/24213/1044来源:牛客网 题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。 注意:选出的k个子矩阵 不能相互重叠。 输入描述: 第一行为n,m,k(1 ≤ n ≤ 100,1 ≤ m ≤ 2,1

[SCOI2005]扫雷MINE

题目描述: 相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来。 万圣节到了 ,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字 表示和它8连通的格子里面雷的数目。 现在棋盘是n×2的,第一列里面某

NC20241 [SCOI2005]扫雷MINE

题目 原题地址:[SCOI2005]扫雷MINE 题目编号:NC20241 题目类型:枚举、递推 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 1.题目大意 扫雷游戏背景,但只有两列,给出右边一列的每一个格子的位置,推测左边的雷有几种排列方案。 2.题目分析 mine[i-2] + mine[i

[SCOI2005]骑士精神

link 和八数码难题是一样的,反正都是把一些棋子挪来挪去。这道题对估价函数有更高的依赖性,不开会只有20分(8个TLE),开了就能跑到100ms。好玄学啊。 #include<bits/stdc++.h> //#define feyn using namespace std; inline void read(int &wh){ wh=0;int f=1;char w=getchar(); while(

[SCOI2005]栅栏

link 搜索题。 我真的不想写搜索啊,这玩意复杂度没法证,能拿多少分得看数据和评测机,而且没有固定思路,就像某些埋头堆硬件的厂家,写起来只有那么难受了。 关于这道题。有一个显而易见的贪心,最后锯出来的木条一定是最小的那些,因为长木条可以锯出来,短木条一定可以,转换方案之后肯定是不劣

BZOJ#1085[SCOI2005]骑士精神

[SCOI2005]骑士精神 思路: 迭代加深,启发式剪枝 代码: #include <bits/stdc++.h> #define int long long int _ = 0, Case = 1; using namespace std; #define all(v) begin(v),end(v) #define nline '\n' const int N = 10; int d[N][N]; int a[N][N]; int b[N][N]; void in

bzoj1085;luogu2324 [SCOI2005]骑士精神

题目描述 输入格式 第一行有一个正整数\(T(T<=10)\),表示一共有\(N\)组数据。接下来有\(T\)个\(5×5\)的矩阵,\(0\)表示白色骑士,\(1\)表示黑色骑士,\(*\)表示空位。两组数据之间没有空行。 输出格式 对于每组数据都输出一行。如果能在\(15\)步以内(包括\(15\)步)到达目标状态,则输出步

# P1896 [SCOI2005]互不侵犯

# P1896 [SCOI2005]互不侵犯首先,看到这一题,就知道如果不是搜索,就是DP。当然搜索是过不了的,所以就应该尝试想出一个DP的解法。而且这还是一个状压dp(状压dp在此就不细讲了) DP的前提之一当然是要找出一个可以互相递推的状态。显然,目前已使用的国王个数当然必须是状态中的一个部分,因为

BZOJ1086: [SCOI2005]王室联邦(贪心,分块?)

Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special Judge Submit: 2610  Solved: 1584[Submit][Status][Discuss] Description   “余”人国的国王想重新编制他的国家。他想把他的国家划分成若干个省,每个省都由他们王室联邦的一个成员来管理。他的国家有n个城市

P2327 [SCOI2005]扫雷

\(b[i]\)表示第\(i\)个行第一列是否有雷,即\(b[i]\)的值只能为\(0\)或\(1\)。 一旦第\(i-1\)行第一列的摆放情况确定,因为要满足\(8\)连通的格子里的数字限制,第\(i\)行第一列的摆放情况也随之确定。 递推式: \[b[i] = a[i-1] - b[i-1] - b[i-2] \]\(a[i-1]\)表示第\(i-1\)行第二列的

[SCOI2005]互不侵犯 题解

题目链接   题目   在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 输入格式 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N) 输出格式 所得的方案数 输入样例 3

[SCOI2005]最大子矩阵

Link Solution 记得很早以前就看了这道题了,当时不会做就一直没做。后来发现 \(m\leq 2\),我也是服了。 \(m=1\) 应该相当好做,就是选 \(K\) 段不相交的段,使收益最大。容易想到线段树优化模拟费用流,复杂度 \(O(K\log n)\)。(因为太麻烦了所以写的 dp) \(m=2\) 的话,同样写 dp,就考虑当前

P2330 [SCOI2005]繁忙的都市【MST】

题目描述 城市C是一个非常繁忙的大都市,城市中的道路十分的拥挤,于是市长决定对其中的道路进行改造。城市C的道路是这样分布的:城市中有n个交叉路口,有些交叉路口之间有道路相连,两个交叉路口之间最多有一条道路相连接。这些道路是双向的,且把所有的交叉路口直接或间接的连接起来了。每

BZOJ 1086: [SCOI2005]王室联邦

维护一个栈,从任意一个节点开始 dfs,在回溯时加入到栈中。 dfs每一个子树之后,若相对于刚进入该节点时栈的大小,新增加的节点超过 B,就将它们分为一块 这样分完保证不超过 2B,而整个dfs结束之后,若栈中还有节点,就把它们归为最后一块 #include <bits/stdc++.h> #define pb push_back #defi

洛谷 P1896 [SCOI2005]互不侵犯

题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子。 注:数据有加强(2018/4/25) 输入格式 只有一行,包含两个数N,K ( 1 <=N <=9, 0 <= K <= N * N) 输出格式 所得的方案数 输

(最小生成树)洛谷P2330 [SCOI2005]繁忙的都市

洛谷P2330 [SCOI2005]繁忙的都市 思路: 模板题。 代码: #include<bits/stdc++.h> #define pii pair<int,int> #define ll long long #define cl(x) memset(x,0,sizeof(x)) const int N=1e6+10; const int mod=1e7+9; const int maxn=0x3f3f3f3f; const int minn=0xc0c0c0c0; c

[模板A*][SCOI2005]骑士精神(A*,IDA*)

输入格式 第一行有一个正整数T(T<=10),表示一共有N组数据。接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位。两组数据之间没有空行。 输出格式 对于每组数据都输出一行。如果能在15步以内(包括15步)到达目标状态,则输出步数,否则输出-1。 这题是一道比较好的\(A*\)的模板题

[SCOI2005] 骑士精神

\(IDA^*\) 学习笔记 具体的预姿势 其实我也是现学现卖,就是觉得本人智商太低,参考了挺多资料才理解 IDA* ,想帮助其他像我一样的菜鸡(虽然我这么菜的可能不多)以及以后自己复习用,把抽象的 IDA* 和本题具体的结合起来,自以为可能更好理解一点qwq 我们用\(g(n)\)表示节点的实际步数,就是已

BZOJ 1084 [SCOI2005]最大子矩阵

Description   这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大。注意:选出的k个子矩阵不能相互重叠。 Input   第一行为n,m,k(1≤n≤100,1≤m≤2,1≤k≤10),接下来n行描述矩阵每行中的每个元素的分值(每个元素的分值的绝对值不超过32767)。 Output

P2324 [SCOI2005]骑士精神(A*)

P2324 [SCOI2005]骑士精神 A*与爆搜的不同就是它有一个估价函数$h(x)$ 这个估价函数一般设为从当前状态到终点状态的估计最短步数,这样可以有效剪枝 但估计值必须严格小于等于实际剩余步数,否则会剪枝过度而影响正确性 $g(x),f(x)$分别为剩余步数和已走步数,则: $g(x)=f(x)+h(x)$ 本题

P1896 [SCOI2005]互不侵犯

______________________________________________________________ 和上一题差不多,注意初始化与判断即可 #include<bits/stdc++.h>using namespace std;long long int n,kk,tot,can[4096],dp[11][1096][121],cnt[4096];long long ans;int main(){ cin>>n>>kk; for(in