Asia Hong Kong Regional Contest 2016

来源:互联网 发布:阿里云api接口 编辑:程序博客网 时间:2024/05/17 22:45

题目:https://vjudge.net/contest/142257#problem

题解:Claris' Blog:http://www.cnblogs.com/clrs97/p/6143035.html


D. Peak Tram

考虑所有可能的能够得到的高度,只有可能是每层楼的高度上下70m的范围。(为了要使当前楼层露出来,只需比前一层高1即可。而在最坏情况下,所有楼高度相同,则需要的高度范围为+70。所以如果要是超出了这个范围,那就一定会存在一个更优解,使得浪费更小,则那个位置不可能取到)。所以本题可以用dp解决。设dp[i][j][k]表示当前为第i座楼,可以看见j座楼,并且能看到的最高的楼的高度为k。那么在状态转移时,我们只需要判断当前位i是不是最后露出来的那个高度为k的柱子即可。于是有dp[i][j][k] = min{dp[i-1][j][k],dp[i-1][j - 1][0 ~k- 1]}。而对于这个式子的后半部分,我们只需要在之前的计算中维护好最小值,就可以在O(1)的时间内完成转移。


F. Playing with Numbers

显然,如果做两次lcm,就可以得到可能的最大解(取2的最大次幂和3的最大次幂)。如果做0次,就只需要找到最小值即可。现在只剩下做一次lcm的情况了。对于这种情况,我们暴力搜索一边所有可能解即可。在比较大小的时候,我们可以通过对于2^a3^b求log2,得到的是a + log2(3)b,只需要比较这个值的大小即可。(可能会有精度误差,不过还是可以通过本题)


J. Taboo

建立AC自动机,然后DP(其实就是DFS枚举下一位是什么,然后在打好标记)即可,发现环就返回无限解。

类似题目:UVA 11468


K. Team Up

将包含关系建树,同时将技能按dfs序重标号,那么每门课程都是一个区间。

考虑贪心,每次取出包含这个点的最小的区间即可。

用并查集维护每个点向上第一个还可以选人的节点即可。