QAQ 由于并没有数据,而且没有A掉的是提交答案题目,所以并没有修改 QAQ
只能放题解了,代码还没有拿到,不过在清华听了一波习题讲评的安利
第一题 成绩单
先说暴力分
对于单调序列来说最优决策一定是把原序列分成若干段,DP即可
对于单峰序列来说最优决策一定是类似于"汉堡抽肉"一样的东西,即每次从中间抽取一段
然后这样我们就有40分辣
对于n<=20我们可以利用状压DP解决
如果常数写的好听说能过n<=30
这样加起来就有60-70分啦
最后说正解,我们采用区间DP,设f(i,j)表示i->j的最优解的答案
不难发现每个区间的状态只需要确定mx和mn就可以了
不妨枚举mx和mn,这样对于这个区间会分成若干段不能被当前mx和mn包含的区间
显然我们对于这部分区间是不能贪心的,但是我们分完区间之后可以对这些区间在做一次DP
DP就是当前区间是单独来选还是跟之前的区间连着一起选,搞一搞转移就可以了
时间复杂度O(n^5),常数非常小所以跑的飞快
第二题:
一眼丝薄题,一开始看到空间限制还以为是强行可持久化题目
后来想了想觉得很简单,空间是为了骗你写可持久化树链剖分的
既然题目比较简单就直接说正解了
我们建出一个trie,对于每个可能的询问开一个vector记录
然后每次更新的时候在trie上跑一跑顺便更新vector就可以了
查询的时候我的方法是直接在对应点的vector里面二分,貌似有O(1)维护的方法
因为最多开10w个vector,总元素个数不超过600w,一个vector里不超过10w个元素
UOJ还开了O2,所以跑的飞快
时间复杂度O(nlogn+60n)
第三题:
这是一道提交答案题
上午试机的时候看到考试说明就知道有提交答案题目
然后考试的时候因为中途蓝屏自己也没有保存程序导致后来玩题答的时间严重不足
最后估计40+分?
第一个点直接就是一个大环,读入输出练习题
第二个点是一个大环打乱了顺序,把顺序搞出来输出就可以饿了
第三个点只有8条路径,暴搜就可以了
第四个点只有16条路径,搞一搞状态压缩也就搞定了
第五个点有100条路径QAQ,然后讲题的时候说没有最优解,部分分的参数给的很良心,让你乱搞的点
第六个点非常密集,而且是联通的,所以我们可以类似UVa的 巴士XX(记不太清了)网络流的方法做一个看上去很像最小路径覆盖的东西就可以了(难度是输出方案)
联通的性质决定了多个环一定存在一种方案转化为一个环且总距离不变
第七个点跟第六个点也是一样的
第8,9,10个点是分块的,每个块的点相距非常远,块内是联通的,做法是块内用网络流搞一搞
块外直接每个块缩成一个点搞搞状压DP或者暴搜就可以了