摘要: 满分做法: 这道题蛮难想的,$dp[i]$表示到i位置的最大操作数,$11111101$和$1011111$这两种情况我们可求出它的最大操作数为长度$ 2$,并发现整个序列的操作数可以拆分成几个小序列的最大操作做次数之和。 所以我们要记录$l[i]$表示左边离$i$最近的$0$的位置,并得出转移: 阅读全文
posted @ 2019-10-16 07:50 lihan123 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 正睿OJ 石子 满分做法: 本题应用了期望的线性性:E(x+y)= E(x)+ E(y)。取走第一堆石子期望其实就是它之前的石堆数+1。这时我们的问题就转化为求取走第一堆之前的期望长度。 令Pi表示第 i 堆石子在第 1 堆之前被取走的概率,因为它只跟第一堆的相对位置有关,所以它的值就是为$\fra 阅读全文
posted @ 2019-10-15 20:51 lihan123 阅读(498) 评论(0) 推荐(0) 编辑
摘要: 满分做法: 按照结束时间从小到大排序,一个一个进行处理。遇到当前时间+处理时间 结束时间的建筑时,把这个建筑和之前修理过的建筑中处理时间最大的进行比较。 如果当前处理时间小于最大值,那么可以进行替换,使当前时间变小,否则就放弃此建筑。剩下的就是直接加进来就可以了。 cpp include inclu 阅读全文
posted @ 2019-10-14 20:55 lihan123 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 满分做法: 题目概述:连通块联通的最小代价。但本题要求选过的点不能再选,所以要选$2 (tot 1)$个点($tot$为连通块个数),这波选点就需要贪心了。 首先在每个连通块中选出最小权值的点,并把剩下的点全部加到队列里排序,再选出$tot 2$个点即可。判$impossible$就是剩下的够不够$ 阅读全文
posted @ 2019-10-14 19:37 lihan123 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 因为第$i$个数最终所在的位置,只与$i$之前所去掉的个有关与具体去掉哪些数无关,所以具有无后效性,可以DP。 方法一:$dp[i][j]$表示到i位置留j个数的匹配值。 当$a[i]=j$时,$dp[i][j]=max(dp[i][j],dp[i 1][j 1]+1)$; 当$a[i]\neq j 阅读全文
posted @ 2019-10-14 09:45 lihan123 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 满分做法: 用$dp[i][j]$表示到$i$位置分为$j$段的最大值,区间dp通常枚举断点,所以预处理$sum[i][j]$表示区间$[i,j]$的单词数。 本题还用了string类型的小技巧,推荐做一下。 cpp include include include include include i 阅读全文
posted @ 2019-10-14 08:15 lihan123 阅读(282) 评论(0) 推荐(0) 编辑
摘要: 70分做法: 全排列,再枚举这个点由那个点扩展出来的即可。 cpp include include include include include include include using namespace std; typedef long long ll; const int maxm=20 阅读全文
posted @ 2019-10-12 19:28 lihan123 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 两种方法 1.Kruskal算法(解决疏松图) 7.最小生成树计数 做法:应用最小生成树的两条性质: 1.不同的最小生成树中,每种权值的边出现的个数是确定的 2.不同的生成树中,某一种权值的边连接完成后,形成的联通块状态是一样的 此时需要记录所有的边权种类,最小生成树需要的种类边权个数,暴力二进制枚 阅读全文
posted @ 2019-10-12 19:18 lihan123 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 介绍几种贪心题型 1.选择不相交区间: 按照结束时间从大到小排序,如果区间左端点大于当前最右点就选,否则不选。 例题:活动安排: 2.区间选点问题: 按照区间的结束位置从大到小排序。对于当前区间如果选的点不够,就尽量在区间末尾选点。 例题:种树 3.区间覆盖问题: 将闭区间按照左端点从小到大排序。对 阅读全文
posted @ 2019-10-12 19:14 lihan123 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 感觉这个题没什么好说的。 对于树的情况直接从1开始搜(保证字典序最小),从大到小排序它的子节点,再接着搜。 对于基环树,直接$n^2$暴力删边即可,用$vector$存边,排序预处理,枚举边,给边两侧的点打上标记,在搜到他们俩时直接continue就行,剩下的和树一样 cpp include inc 阅读全文
posted @ 2019-10-12 16:40 lihan123 阅读(114) 评论(0) 推荐(0) 编辑