摘要: 题目大意:给定一个 N 个非负整数数组成的序列,每个点有一个贡献值,现选出其中若干数,使得每连续的 K 个数中至少有一个数被选,要求选出的数贡献值最小。 题解:设 $dp[i]$ 表示考虑了序列前 i 个数的情况,且第 i 个数被选上时的最小贡献值,因此状态转移方程为:$dp[i]=min\{dp[ 阅读全文
posted @ 2018-11-14 14:37 shellpicker 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定 N 个数字,编号分别从 1 N,M 个位置,N 个数字按照相对大小顺序放在 M 个位置里,每个数放在每个位置上有一个对答案的贡献值,求一种摆放方式使得贡献值最大。 题解:一道典型的线性dp问题,设 $dp[i][j]$ 表示前 i 个数摆放在了不超过前 j 个位置,且第 i 个数字正 阅读全文
posted @ 2018-11-13 23:19 shellpicker 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定 N 个点 M 条边的无向简单联通图,留下最多 K 条边,求剩下的点里面从 1 号顶点到其余各点最短路大小等于原先最短路大小的点最多怎么构造。 题解:我们可以在第一次跑 dij 时直接采用贪心策略,即:若当前答案集合的大小小于 K 且优先队列非空,则继续优先队列BFS,每次把一条边加入 阅读全文
posted @ 2018-11-13 14:42 shellpicker 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定 N 个数,求在这 N 个数中至少选出几个数能表示出所有数字,输出最少的个数。 题解:由于只有小的数字可以表示大的数字,因此首先需要对这 N 个数字进行从小到大排序。排序之后就变成一道不定个数的数字组合问题,即:完全背包思想。遍历每一个数字,若该数字不能由之前的数字表示出来,则将答案加 阅读全文
posted @ 2018-11-12 15:55 shellpicker 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 题目大意:定义对称二叉树为每个节点的左右子树交换后与原二叉树仍同构的二叉树,求给定的二叉树的最大对称二叉子树的大小。 代码如下 cpp include using namespace std; const int maxn=1e6+10; struct node{ int l,r,size,val; 阅读全文
posted @ 2018-11-12 00:46 shellpicker 阅读(539) 评论(1) 推荐(0) 编辑
摘要: Splay 均摊复杂度证明见此处 $\rightarrow$ "链接" 代码如下 阅读全文
posted @ 2018-11-11 13:50 shellpicker 阅读(183) 评论(0) 推荐(0) 编辑
摘要: Treap,又称树堆,是一种通过堆性质来维持BST平衡的数据结构。具体体现在对于树上每一个点来说,既有BST维护的值,又有一个堆维护的随机生成的值。维护平衡性的办法是 根据堆维护的值的相对大小关系进行左旋和右旋这两种操作,在旋转的前后,依然满足BST性质 。 latest updated:2019. 阅读全文
posted @ 2018-11-10 16:40 shellpicker 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定一个大小为 4 4 的棋盘,分别有 7 个黑子、7 个白子和 2 个空位构成,求出至少需要移动多少步,才能使得四个相同的棋子共线。 题解:显然每一种棋盘的局面都是一个状态,因此需要采用状态压缩的搜索。总共的局面最多有4e7种,并且所给的内存足够开下哈希表。 需要注意的是,数据中有很多不 阅读全文
posted @ 2018-11-09 00:47 shellpicker 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定 N 个变量和 M 个变量之间的偏序关系,问能否求出这 N 个变量之间的一个全序。若能,输出最少利用多少条已知信息即可求的结果,且输出该全序;若无解,输出到第几条已知信息可以判定无解;若读到最后一条信息也无法判断,输出无法判断。 题解:偏序关系自然对应着一个有向图,每一个已知信息等价为 阅读全文
posted @ 2018-11-08 21:35 shellpicker 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 代码如下 阅读全文
posted @ 2018-11-06 22:31 shellpicker 阅读(322) 评论(0) 推荐(0) 编辑