[NOIP2017]一句话题解
NOIP2017
- 成绩:大水题,甚至都不用double
- 图书管理员:首先,我们先将图书编码从小到大排序,其次,我们在计入用户需求时的同时只要记住有几位就可以之后用%来判断,模拟即可
- 棋盘:dfs,在原有的参数x,y上,我们增加一个bool类型变量fl来判断上一次有没有用魔法,唯一和模板不一样的地方就在于,它需要在过程中计算所花金币数量,随后转移即可
- 跳房子:真是到
好题啊……首先要求最少的金币数,所以就考虑用二分答案的方式,只不过普通的check函数需要\(\omicron\) ( \(n^2\) )的复杂度,明显会时间超限(虽然我能拿玄学卡常弄到80pts)但是因为在check函数中的dp里我们需要取最大值,但是我们注意到单调队列(不是优先队列)可以把维护最大最小值得复杂度降至\(\omicron\) (n)于是就能过了
提高
- 小凯的疑惑:塞瓦韦斯特定理(不确定字对不对)就能解这道题,公式:\(a\times b-a-b\)具体证明将会再开一片文章,反正我是想到了2种证明方法
- 时间复杂度:
- 逛公园:
- 奶酪:简单的并查集,只需要再建一个超级源点和一个超级汇点即可,注意,千万不能用sqrt,这玩意毁一生
三年OI一场空,丧失精度见祖宗 ——zzt
- 宝藏:这题数据也就12,所以说裸裸的状压dp啊,对于每个状态s我们先要求出每个宝藏屋到原点的最短距离,然后我们只需要枚举所有情况然后直接转移莽就完事了
f[s|p][i]=min(f[s|p][i],f[s][i-1]+i*res);
//dp方程
//s|p意味着合并开发过的和没开发过的宝藏屋,即让所有宝藏屋都变成开发的
//f[s][i-1]+i*res 合并宝藏屋的另一种写法
//f[s][i-1]这是已开发的宝藏屋的代价
//i*res即开发剩余的没开发的宝藏屋的代价
- 列队: