2022.1.21

T1【GDOI2008】彩球游戏

给一个4 * 4的矩阵,每个格子上有一个彩球,有红蓝绿三种颜色。有两种操作,一种是选择一个2 * 2的矩形,把矩形的球顺时针旋转。另外一种也是选择一个2 * 2的矩形,红的变蓝,蓝的变绿,绿的变红。现在给定初始状态和最终状态,问最少需要多少次操作。

遇到这种有初始状态和最终状态的题,如果范围不是很大,可以考虑双向BFS。

直接双向BFS即可。

T2 【GDOI2008】彩球游戏

给n个高度互不相同的楼,然后每个建筑上有猫,建筑i上的猫可以保护建筑j当且仅当楼i到楼j之间没有比楼i高的楼,楼j也低于楼i。现在有 K ( 1 ≤ K ≤ 5 ) K(1\leq K\leq 5) K(1K5)个炸弹,一个炸弹可以炸掉一栋楼上的猫,问炸完后使得每栋楼保护其的猫的数量的最大值最小。

看到最大值最小,我马上开始想二分,之后又发现每一次操作其实就是区间减,又观察的k很小,想要利用这些条件来做。但是发现dp的话很容易出现后效性,不知道怎么做,于是比赛时这道题就搁浅了。比完赛后看题解,发现原来可以建树,因为每栋楼高度互不相同,所以任意两个区间都是包含与相离的关系。

于是可以得到一个做法:把一栋楼向他能影响的区间的两边的最大值连边,这样就得到了一棵树。之后考虑树型dp,设 f i , j f_{i,j} fi,j表示i这颗子树用了j个炸弹的答案。转移的时候直接暴力枚举以两个儿子为根的子树用了多少个炸弹,转移很显然。

T3 【GDOI2008】狐狸的谜语

给一个由数字组成的字符串 ( 1 ≤ l e n ≤ 20 ) (1\leq len \leq 20) (1len20)和一个数 T ( 1 ≤ T ≤ 200 ) T(1\leq T\leq 200) T(1T200),现在可以在这个字符串里加入乘号或加号,问最少需要多少个符号才能让字符串的运算结果为 T T T

比赛时想着直接顺着dp,其实这么做很麻烦,于是比赛时直接爆零了。

其实可以考虑区间dp。因为乘号的优先级高于加号,所以先用一个区间dp把只填乘号的算出来,之后字符串就被分成了好几段,只要在段之间加入加号即可,这些也可以用一个区间dp来完成。

T4 【GDOI2008】酱油推广计划

给一幅有向图,保证任意一个点只在一个环上,问从任意一个点出发的最长路。

比赛一开始以为如果用Tarjan缩点后就变成了一棵树,后来发现样例就是一个反例,之后并没有多想

其实只要用 O ( n 2 ) O(n^2) O(n2)的暴力跑就行了,如果走到之前走过的点,只要把上一次走到的最长路加入当前答案即可。为什么这个做法是正确的呢?考虑一个点i,能走到一个点j,还有一条路径可以走到j且经过一个点k,我们暴力的时候会走过这两条路径。如果说这个做法不对,那么就是我接下来从j开始走遇到了k,但是会发现这样的话j就在两个环内,那么这个图是不合法的,所以这个做法正确性可以保证

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值