2022.1.19总结
1075. 【GDKOI2006】新红黑树
看到\(n \le 20\)想到了状压,但有些小问题。赛后发现只需要改成记忆化搜索,对最优的决策的选择会方便许多。
1077. 【GDKOI2006】防御力量
考场没有什么想法,还看错了\(n\)的范围,没有想过\(n^2\)的做法。
其实只需对\(A\)城做直线,考虑直线上下的点即可。
1083. 【GDOI2006】拯救亚特兰蒂斯
考场想到了网络流,但建图出了\(bug\)。
其实是一到最小点覆盖的版题。
1043. 【GDOI2006】最大和
考场只能想到\(n^6\)的\(DP\),考虑优化\(DP\),发现我们可以不记录上一个点,改为记录\(val\),
枚举$ a_{i,j} = val $ 进行转移,即可做到\(O(n^4)\)
总结:这次比赛不是很理想,对于一些暴力还需练习,对于 \(n \le 10^4\) 的范围是可以使用\(n^2\)算法的。
2022.1.20总结
1041. 【GDKOI2007】大航海
考场想到了\(O(n^2 + m)\)的DP,但空间开不下。考虑去优化我们的空间,发现边数\(P \le 5 *10^5\),而我们有用的状态和边数有关,那就可以去枚举边来转移\(DP\)
1079. 【GDKOI2007】纳克萨玛斯
考场想到二分\(ans\),但不会\(check\),对网络流的模型转化不够熟练。
对于这题,相当于把每一个人和角色匹配,有\(ans\)个队伍,相当于匹配\(ans\)次,那么建图就显然了,再去考虑\(D\)的限制,只需多开两个节点去限制不同阵营的流量即可。
1080. 【GDKOI2007】轰炸
考场想到去用堡垒贡献炸弹,打了线段树,用了动态开点导致常数过大\(TLE70\),改为离散化,卡卡常就过了
5190. 【NOI2017模拟7.1】景中人
考虑到一个性质,对于一种最优解,矩形只会分离或包含,不会相交。那就设\(f_{i,j,x}\)表示覆盖区间\([i,j]\)的\(y > x\)的点的矩形数。
有两种情况:
\(1:\) 两个矩形分离 \(f_{i,j,x} = \min{f_{i,k,x} + f_{k+1,j,x}}\)
\(2:\) 两个矩形包含\(f_{i,j,x} = \min{f_{i,j,h} + 1}\),其中\(h\)表示追多延伸的高。
时间复杂度是\(O(n^4)\),用递归实现转移,加上记忆化搜索即可
总结:保险用离散化,对网络流的练习要加强,对DP题的练习也需加强
2022.1.21总结
1085. 【GDOI2008】彩球游戏
考场只用了单向\(BFS\),第一次做双向\(BFS\)的题,通过预处理可以减小复杂度
1087. 【NOIP动态规划专题】鱼肉炸弹
把题看错了,以为与\([JXOJ2018]\)守卫相似,一直想不出来。其实考虑一个\(max\),那他能看到的范围一定是连续的且两边的树都小于\(max\),不妨考虑\(DP\)如何转移,发现只有从小的数想大的数转移,相当于从两边向\(max\)转移,那么即可建树,跑树形\(DP\)
1100. 【GDOI2008】狐狸的谜语
考场想到了正确的区间\(DP\),因为乘的优先级大所以可以先处理乘,再添加号。
设\(g_{l,r,k}\)表示区间\(l,r\)内只填乘号的积为\(k\)的最少需要添加的符号
设\(f_{l,r,k}\)为区间\(l,r\)使和为\(k\)的答案
\(g_{l,r,x * y} = \min g_{l,k,x} + g_{k + 1,r,y} + 1\),\(g_{l,r,0} = \min{g_{l,k,0} + 1,g_{k + 1,r,0} + 1}\)
\(f_{l,r,x + y} = min{f_{l,k,x} + f_{k + 1,r,y} + 1,f_{l,k,x} + g_{k + 1,r,y} + 1,g_{l,k,x} + f_{k + 1,r,y} + 1}\)
答案显然
1160. 【GDOI2008】酱油推广计划
一道非常版的缩点\(DP\),跑完\(targan\)后处理环内信息,再拓扑后\(DP\)即可
总结:这次比赛时间分配不平衡,题目没有仔细看,以后读题要认真,更要提升一下代码的实现能力
2022.1.22总结
1143. 【GDKOI2010】比萨
考场没有把时间放在这题,其实这题并不难,考虑\(m\)只有\(1000\),那么他的读入就有循环节,而循环节的大小追多为\(2001\),只需求一个循环节的答案,两个循环节的答案,跨所有的循环节的答案即可
1147. 【GDKOI2010】圆桌
一眼就是双向搜索,但我挂了\(10pts\),原因是对\(-1\)的判断出锅了,以后要细心点
1144. 【GDKOI2010】圈地计划(网络流)
一道比较板的最小割,对于每一个地方,要么是商业区,要么是工业区,对于两个点,放在一个集合可以产生额外的收益,这是经典最小割模型。
1148. 【GDKOI2010】推箱子
考场想到去处理一个箱子能别那些箱子挡住,但对复杂度的认识不清和实现的困难,放弃了这种思想。但其实是可以的。
总结:以后比赛不要死磕一题,导致T1没想过,白给了许多分,对于代码实现还需加强
2022.1.23晚总结
2112. 【GDKOI2011】下水道
比较简单,模拟即可
2113. 【GDKOI2011】公园里的树
把矩阵拆成\(4\)条边,考虑每个点最早被那条边覆盖,离线用线段树维护即可。
2114. 【GDKOI2011】反恐任务
一眼感觉和割点和割边有关,对于每一个点双,建一个方点,构建圆方树,求\(LCA\),讨论一下\(LCA\),与删的点或边的关系即可。
2115. 【GDKOI2011】搬家
爆搜+剪枝可以过
总结:对于代码实现能力还要加强,T2不应打挂,对于图论还需学习与巩固。
2022.2.10总结
2828. 【GDOI2012】堆积木(stack)
考场眼切,支持插入删除操作,还要询问第\(k\)大,不就是平衡树吗,对于颜色开一个\(26\)的数组即可。
2831. 【GDOI2012】AB棋(chess)
考场想到了另外\(30\)的做法,错误的推广了一下,得了\(45\)分。
考虑一个\(1\)的最终位置,那么每个\(1\)都会有一个需要移动的步数,对于操作\(1\)相当于,把一个数减一,操作\(2\)相当于把两个相同的数减一,那么对于三个相同的数和偶数是对结果不产生影响的,只需考虑一个奇数和两个奇数,设\(a\)为一个奇数的个数,\(b\)为两个奇数的个数,当且仅当\(a,b\)都为偶数是为必败态,因为其他情况都能转化成必败态,而必败态只能转化为必胜态
2832. 【GDOI2012】弹珠游戏(game)
考场看到数据很小想到了爆搜,但觉得很复杂所以没敢打。
正解就是爆搜,可以用迭代加深搜索,压缩一下状态判重即可。
2830. 【GDOI2012】东方非想天则(daze)
考场打了\(dfs\)暴力,正解\(DP\),首先考虑我们选择的顺序,不看\(Limit\)的限制,对于\(x,y\),当且仅当\(D_x + D_y * R_x > D_y + D_x * R_y\),先选\(x\)更优。按着排序,就可以做背包了,但发现正着做很麻烦,考虑倒着做,就简单了。最后一个技能的位置不满足我们刚刚排出来的序。因为我们只考虑他的$ D\(值。答案中的最后一个技能的\)D\(值一定要是没选的技能中最大的,假如我们把序列按\)D\(值 从大到小排序,\)s_i\(表示前\)i$个的 \(L\)值和,如果 \(s_i>50\),那么第\(i+1\)个技能不可能是答案中的最 后一个。这是因为\(s_i>50\),那么前\(i\)个技能不可能全部选完,必定存在一个技能没有选,他的\(D\)值就一定比第\(i+1\)个技能的\(D\)值大。于是,最多枚举按\(D\)值排序后的前\(L\)个技能。时间复杂度\(O(n * L^2)\)
总结:这次比赛没有去实现复杂的暴力,对博弈论的学习要加强,思维还不够开阔。
2022.2.26总结
3282. 【GDOI2013】飞行棋
赛时想了一个错误的 \(DP\),赛后学会了,考虑去设\(f_i\)表示,从位置\(i\)到终点的期望步数,可以列出位置\(51,52,53,54,55\)的方程,用高斯消元来求解。倒推出所有的\(f\)值即可。
3283. 【GDOI2013】大山王国的科举考试
考场想到了正解,但数据将我坑到了\(45pts\),考虑到\(a,p\)都只有\(1000\),那么当\(p \ge \sqrt{1000} = 34\)时可以枚举\(p\)的倍数,用主席树维护即可;对于\(p < 34\)时,开\(32\)棵线段树,记录不同的\(p\)对应不同的序列。
时间复杂度为\(O(T\sqrt{1000}log\) \(n)\)。
3284. 【GDOI2013】重构
考场没想法,正解时考虑将图先转化成\(DAG\),显然对于一个强连通分量的最小边数就是点数。
想在问题就转化成了如何重构一个\(DAG\)。考虑一条边\((i,j)\),如果存在点\(k\)且\(k\)不等于\(i\)或\(j\),使得\(i,k\)联通,\(k,j\)联通,那么\((i,j)\)显然是不连的,可以用\(floyd\)加\(bitset\)优化