首页 > TAG信息列表 > JLOI2015
【数学 线性基】[JLOI2015]装备购买
传送门: https://www.acwing.com/problem/content/description/211/ 分析 采取这样的贪心策略:将物品看作是矩阵中的行,按照花费升序排序,然后从 \(1-n\) 扫描,当第 \(i\) 个行和前面加入的所有行线性无关的时候,就将其花费计入答案,反之不计入。 这样做为什么是对的呢?采用归纳法P3266 [JLOI2015]骗我呢
#include <cstdio> #include <iostream> using namespace std; #define pii pair< int , int > #define fi first #define sc second #define mp make_pair const int MAXN = 3e6 , Mod = 1e9 + 7; #define Add( x , y ) ( x + y >= Mod ? x + y - Mod[JLOI2015]装备购买
线性空间向量基底板子。 不同于异或空间的线性基。 我们考虑求出这些向量的基底,我们只要按照价值小的先插即可,最后选择 \(k\) 个向量底即可。 我们发现如果一个向量可能成为底,则他的价值一定最小。 #pragma optimize(2) #include<bits/stdc++.h> using namespace std; template<tyBZOJ-4003 [JLOI2015]城池攻占
文章目录 题面题解 题面 传送门 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。 这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi <i。也就是说,所有城池构成了一棵有根树。这 m 个骑士用 1 到 m 的整数[JLOI2015]装备购买
给出 \(n\) 个 \(m\) 维向量,每个向量都有代价,求 \(n\) 个向量的最大独立集和最小代价. \(1\leq n,m\leq 500\) 一个向量可以被其他向量表示出来,那么,在高斯消元的矩阵上,消完元之后必定必定没有元素剩下. 而且,对于 \(n\) 个向量来说,插入向量的先后,和最后剩余的个数并没有关系.#斯坦纳树,状压dp#洛谷 3264 [JLOI2015]管道连接
题目 分析 如果对于每一个频道单独跑斯坦纳树可能会存在两种频道共用一条道路而重复统计的情况, 考虑状压dp,设\(f[s]\)表示选择频道二进制状态为\(s\)的最小贡献,那么对于每个状态跑斯坦纳树然后状压求最小值即可 代码 #include <cstdio> #include <cctype> #include <queue> #inc「JLOI2015」骗我呢
由题意,每一行内的数单调递增。又因为 \(0 \leqslant a_{i,j} \leqslant m\) 限制了这些数的取值范围。 那么我们相当于在 \(m + 1\) 个数中选 \(m\) 个数。必然有两个之间相差 \(2\),其余的数连续。 我们设 \(f_{i,j}\) 表示第 \(i\) 行中,被舍弃掉的数是 \(j\) 的方案数。 那么则有[堆][启发式合并]luogu P3261 [JLOI2015]城池攻占
题面 https://www.luogu.com.cn/problem/P3261 分析 考虑对于每个点开堆维护子树中到达这里的所有人的攻击力 对于攻击力改变可以用标记数组给堆打上标记 自下向上合并时,选择较小的堆合并给较大的堆,注意修改每个节点对应的堆编号 当一个值要合并入一个有标记的堆时,直接给这个值除P3261 [JLOI2015]城池攻占 可并堆
题意: 戳这里 分析: 又是一道巨佬秒切了的题 我们以每个城市作为一个小根堆,把骑士作为元素,每次弹出不符合的元素之后 向自己的 \(fa\) 进行合并,同时更新堆内的每一个元素 注意特判堆是否为空 代码: #include<bits/stdc++.h> #define lc t[rt].ls #define rc t[rt].rs #define pb push[JLOI2015][左偏树] 城池攻占
题目链接 考虑每个节点建一个以骑士攻击力为关键字的小根堆,从叶子节点向上扫描,每次弹堆至堆顶骑士攻击力大于当前城池防御力,可以采用左偏树维护, 对于城池的攻击力改变值,可以借用线段树区间修改的懒标记思想,打上乘法及加法标记,每次涉及到改变堆结构的操作前下放标记即可。 稍微卡常[JLOI2015]城池攻占
[JLOI2015]城池攻占 solution 如果战斗力最小的士兵都能存活下来,那么在堆中的其他士兵一定可以活下来 所以就从攻击力小的开始遍历一下就行。 那么我们就需要把这两个堆里面的元素合并在一起,于是我们想到用可并堆,即左偏树,记录每个士兵开始和阵亡(或活到最后)的位置,之后第二部分的答P3261 [JLOI2015]城池攻占 题解
题目 小铭铭最近获得了一副新的桌游,游戏中需要用 \(m\) 个骑士攻占 \(n\) 个城池。这 \(n\) 个城池用 \(1\) 到 \(n\) 的整数表示。除 \(1\) 号城池外,城池 \(i\) 会受到另一座城池 \(f_i\) 的管辖,其中 \(f_i < i\)。也就是说,所有城池构成了一棵有根树。这 \(m\) 个骑士用 \(1\) 到P3261 [JLOI2015]城池攻占 [贪心,左偏树]
板子吧,左偏树合并是 1log 的,按照深度合并,而且可以打 tag,pushdown。 // by Isaunoya #include<bits/stdc++.h> #define int long long using namespace std; struct io { char buf[1 << 27 | 3], *s; int f; io() { f = 0, buf[fread(s = buf, 1, 1 << 27, stdin)] = '[JLOI2015]装备购买
题目 点这里看题目。 分析 可以发现,一组装备可以同时购买的条件是这组装备线性无关。 首先不难发现一个拟阵\(M=<S,I>\),其中: \(S\)为装备的集合;如果\(A\subseteq S\),那么\(A\in I\)当且仅当\(A\)内的元素线性无关。 显然\(M\)是一个子集系统,考虑一下它的交换BZOJ 4002: [JLOI2015]有意义的字符串
看到式子的形式,可以想到斐波那契数列的通项的形式 设 \(f_n = \left(\dfrac{b+\sqrt d}{2}\right)^n + \left(\dfrac{b-\sqrt d}{2}\right)^n\) 这两个是方程 \(x^2-bx+\dfrac{b^2-d}{4}=0\) 的两根 根据特征方程及特征根可以得到递推式 \[f_n=bf_{n-1}-\frac{b^2-d}{4}f_{n-2}\]luoguP3261 [JLOI2015]城池攻占
题意 暴力自然是模拟,考虑优化下模拟的过程。 我们对每个点开个左偏树,初始为在该点的骑士,之后dfs过程当中从儿子向父亲合并,同时弹出小于当前点的骑士,增加当前点的答。对于每个骑士的答案,我们记录他的起始点和终点即可。 code: #include<bits/stdc++.h> using namespace std; #defin题解 P3265 【[JLOI2015]装备购买】
这题xswl,我把\(m\)打成\(n\)得了\(90\),一看数据…… Solution [JLOI2015]装备购买 题目大意:给定\(n\)个装备,每个装备属性是一个长为\(m\)的向量,有一个价格,你购买的装备属性必须是线性无关的,求最大可购买的装备数,以及此前提下的最小价格和 线性基,高斯消元 我们把所有装备的属【JLOI2015】骗我呢
题意简述: 求原点到点$P(n+m+1,n)$,并且不能经过(或跨越)直线$A:y=x+1$和$B:y=x-(m+2)$的路径条数。 题解: 这道题应该可以算是格路计算问题的巅峰了吧。 首先,我们把$P$点沿$A$进行翻折,记为$P'$,从原点到$P'$的路径条数就是“从原点到$P$,一定经过(或跨越)直线$A$的路径条数” 注意我们不知P3261 [JLOI2015]城池攻占 左偏树
题目描述 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖,其中 fi <i。也就是说,所有城池构成了一棵有根树。这 m 个骑士用 1 到 m 的整数表示,其中第 i 个骑士的初始战【左偏树】 [JLOI2015]城池攻占
原来左偏树还可以打tag,get了 和线段树打tag一样,时不时Push_Down就好了 然后这里显然也是要先乘法后加法的 tag打上了之后还是其他一般左偏树差不多,有些细节注意一下 然后开 long long!!! 1 #include<bits/stdc++.h> 2 #define int long long 3 #define writeln(x) write(x),BZOJ4003[JLOI2015]城池攻占——可并堆
题目描述 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。 这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi <i。也就是说,所有城池构成了一棵有根树。这 m 个骑士用 1 到 m 的整数表示,其 中第 i 个骑士的初始战斗力[JLOI2015]装备购买
洛咕 题意:n个装备,每个装备m个属性,每个装备还有个价格.如果已经拥有的装备的每一项属性 为它们分配系数(实数)后 可以相加得到某件装备,则不必要买这件装备.求最多装备下的最小花费. 分析:n行m列的矩阵,每个装备的花费可以看作在m+1列上,但实际上花费与装备属性没有半毛钱关系. 直接贪[JLOI2015]管道连接(斯坦纳树)
[Luogu3264] 原题解 多个频道,每个频道的关键点要求相互联通 详见代码,非常巧妙 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<queue> #define debug(...) fprintf(stderr,__VA_ARGS__) #define Debug(x) cout<<#x<<&qu「JLOI2015」骗我呢 解题报告?
「JLOI2015」骗我呢 这什么神仙题 \[\color{purple}{Link}\] 可以学到的东西 对越过直线的东西翻折进行容斥 之类的..吧? Code: #include <cstdio> const int mod=1e9+7; const int N=3e6+10; inline int add(int a,int b){return a+b>=mod?a+b-mod:a+b;} #define mul(a,b) (1ll*(aJLOI2015 DAY2 简要题解
「JLOI2015」骗我呢 题意 问有多少个 \(n \times m\) 的矩阵 \(\{x_{i, j}\}\) 满足 对于 \(\forall i \in [1, n], j \in [1, m]\) 有 \(x_{i, j} \in[0, m]\) ; 对于 \(\forall i \in [1, n], j \in [1, m)\) 有 \(x_{i, j} < x_{i, j + 1}\) ; 对于 \(\forall i \in (1