【2018.10.18】CXM笔记(动态规划)】的更多相关文章

1.给你一棵树,让你修任意多条点不相交的铁路(每条铁路都是一根链),定义一个点的代价为它到根节点的路径中不在铁路上的边数,求一种设计方案代价最大的点最小. 铁路点不相交与 每个点连出去的铁路条数 $\le 2$ 等价. $f(i,1/0)$表示点$i$与父亲有无铁路相连时的最小答案. 然后应该是随便做吧…… 2.同上,求代价最大点最小的方案数. 把答案加入dp的一维,让dp改为维护在某点为某种答案时的方案数.…
传送门 不难看出最后的矩形一定有一条边与凸包某条边重合. 因此先求出凸包,然后旋转卡壳求出当前最小矩形面积更新答案. 代码: #include<bits/stdc++.h> #define N 50005 #define eps 1e-9 using namespace std; struct pot{ long double x,y; inline pot operator+(const pot&a){return (pot){x+a.x,y+a.y};} inline pot op…
题意:给你一棵\(n\)个节点的树,\(q\)个询问,每次询问读入\(u,v,k,op\),需要满足树上有\(k\)对点的简单路径交都等于\(u,v\)之间的简单路径,\(op=1\)表示\(k\)对点中每个点只能存在于一个点对中,否则每个点可以存在于多个点对中,问那k对点有多少种选法,答案对\(998244353\)取模. 数据范围:对于\(100%\)的数据,保证 \(1≤n≤10^5,1≤u,v≤n,u \ne v,1≤k≤min(n,500),op∈{0,1}\),保证每个节点的度数不超…
一句话题意:给你三个数列{a_i},{b_i},{c_i},保证每个数列都恰好是一个排列.你需要求出满足\(a_i<a_j,b_i<b_j,c_i<c_j\)的有序对\((i,j)\)的数目. 提示:为了避免过量的输入对程序的运行效率产生影响,数列为生成的. 数据范围: 对于 100% 的数据,保证\(1≤n≤ 2*10^6\), 看似一个三维偏序,实际上cdq分治只能36分,还得卡常才能获得高于36分的好成绩. 事实上,因为这三个序列是排列,所以我们可以将其转化为3个二维偏序,如下:…
题目描述 三体人将对地球发起攻击.为了抵御攻击,地球人派出了 $A × B × C$ 艘战舰,在太 空中排成一个 $A$ 层 $B$ 行 $C$ 列的立方体.其中,第 $i$ 层第 $j$ 行第 $k$ 列的战舰(记为战舰 $d(i, j,k)$)的生命值为 $d_{i, j,k}$. 三体人将会对地球发起 m 轮“立方体攻击”,每次攻击会对一个小立方体中的所有 战舰都造成相同的伤害.具体地,第 t 轮攻击用 7 个参数 $la_t ,ra_t , lb_t ,rb_t , lc_t ,rc_t…
传送门 组合数学好题. 题目要求输出的结果成功把概率转化成了种类数. 本来可以枚举统计最小值为iii时的概率. 现在只需要统计最小值为iii时的方案数,每一行有不少于iii个1的方案数. 显然一行选i个1的方案数为(mi)∗xm−i∗yi\binom {m} {i}*x^{m-i}*y^{i}(im​)∗xm−i∗yi 于是对于每一行分开考虑最后用快速幂合并就行了. 代码: #include<bits/stdc++.h> #define ll long long using namespace…
传送门 线段树好题啊. 题目要求的是sum−a−b−c+maxsum-a-b-c+maxsum−a−b−c+max{∣a+v∣+∣b+v∣+∣c+v∣|a+v|+|b+v|+|c+v|∣a+v∣+∣b+v∣+∣c+v∣}. 那么后面有几种情况: a+v+b+v+c+va+v+b+v+c+va+v+b+v+c+v a+v−b−v+c+va+v-b-v+c+va+v−b−v+c+v a+v+b+v−c−va+v+b+v-c-va+v+b+v−c−v −a−v+b+v+c+v-a-v+b+v+c+v−…
传送门 考虑到模数等于7 * 13 * 17 * 19. 那么只需要维护四棵线段树求出每个数处理之后模7,13,17,197,13,17,197,13,17,19的值再用crtcrtcrt合并就行了. (因为太懒不想写crt改用枚举求解水过) 代码…
传送门 旋转卡壳板子题. 就是求凸包上最远点对. 直接上双指针维护旋转卡壳就行了. 注意要时刻更新最大值. 代码: #include<iostream> #include<cstdio> #include<algorithm> #define N 50005 using namespace std; inline int read(){ int ans=0,w=1; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')w=…
传送门 线段树妙题. 显然平方几次就会循环(打表证明不解释). 然后所有环长度的lcmlcmlcm不大于70. 因此维护一下当前区间中的节点是否全部在环上. 不是直接暴力到叶子节点修改. 否则整体打标记. 简单合并一下就行了.(细节见代码) 代码: #include<bits/stdc++.h> #define N 100005 #define lc (p<<1) #define rc (p<<1|1) #define mid (T[p].l+T[p].r>>…