link
Gym - 102222、2018宁夏邀请赛、2019银川icpc网络预选赛
current: 10 / 13
A. Maximum Element In A Stack
B. Rolling The Polygon
C. Caesar Cipher
D. Take Your Seat
E. 2-3-4 Tree
模拟题
// #pragma GCC optimize(2) // #pragma GCC optimize(3) // #pragma GCC optimize(4) #include#include #include #include #include #include #include #include #include #include <string> #include #include #include #include #include #include
F. Moving On
G. Factories
树形DP + 背包
https://blog.csdn.net/dllpXFire/article/details/81085093
https://blog.csdn.net/starlet_kiss/article/details/100176118
问题可以转化为边使用的贡献。
所以对于一个点u,在以u为根的子树中选了几个点,可以算出边的贡献。
// #pragma GCC optimize(2) // #pragma GCC optimize(3) // #pragma GCC optimize(4) #include#include #include #include #include #include #include #include #include #include <string> #include #include #include #include #include #include
H. Fight Against Monsters
I. Bubble Sort
https://www.cnblogs.com/wzgg/p/11453284.html
J. Nested Triangles
K. Vertex Covers
折半枚举 + 高维前缀和(用sosDP枚举父集)
先处理出前半数点的情况,注意去掉不合法的状态。然后对每个状态累加上包含这种状态的父集的DP值。
然后枚举后半数点的情况,对于两半间的边,如果后半数点没选,前半数点就必选。累计答案即可。
// #pragma GCC optimize(2) // #pragma GCC optimize(3) // #pragma GCC optimize(4) #include#include #include #include #include #include #include #include #include #include <string> #include #include #include #include #include #include
L. Continuous Intervals
单调栈 + 线段树
参考: https://blog.csdn.net/u013534123/article/details/81164504
首先要想到问题可以转化为求 满足 $max - min + 1 == cnt$ 的区间个数
其中max表示区间最大值,min表示区间最小值,cnt表示区间种类数。
对公式移项 得到$max - min - cnt == -1$。
于是可以枚举区间右端点,计算有多少左端点满足$max - min - cnt == -1$。
/* * @Author: chenkexing * @Date: 2019-09-01 21:08:33 * @Last Modified by: chenkexing * @Last Modified time: 2019-09-01 22:41:48 * @link:https://nanti.jisuanke.com/t/41296 */ #include#include #include #include #include #include #include #include #include #include <string> #include #include #include #include #include #include
M. Acyclic Orientation