2018年8月11日训练日记

HDU 5406 CRB and Apple (树状数组+DP)树按高度从大到小排序,相同的话美味值从小到大排序,求美味值的两个不相交的最长不下降子序列。注意虽然求法相同,但不是LIS(CRB(or his girlfriend) can eat the apple only when it has equal or greater deliciousness than one he(she) just ate before.)但是我搜了几个题解都说是求LIS,然后下面求得最长不下降子序列,题解们能不能别这样误导新人。。。真是醉了。对序列元素离散化后,dp[i][j]表示两个序列的终止位置分别为i,j的最大长度。从左向右O(n)考虑每个美味值。对于一个值c,更新dp数组,O(n)枚举第一维状态i。dp[i][c] = dp[c][i] = max(dp[i][j] | j < c),但是这里可以用树状数组或是其他数据结构,优化到log(n)。注意不能边枚举变修改,会对答案造成影响,所以再开一个tmp数组。题解参考这里

HDU 5407 (CRB and Candies) (结论) 有公式:(n+1)*LCM(C(n,0),C(n,1)..C(n,n)) = LCM(1,2,3..n)(据说oeis能查到),然后有:

。初始a(1)=1,b(1)=1。n=p的k次方 意思就是p是n唯一的质因子。

然后除(n+1)取模要求逆元。题解参考这里

HDU 5409 CRB and Graph(图论-桥)题意:一个联通的无向图, 对于每一条边, 若删除该边后存在两点不可达,则输出这两个点, 如果存在多个则输出第一个点尽可能大,第二个点尽可能小的。 不存在输出0 0。看过图论的话还是比较简单的。。。删除边之后存在两点不可到达称这条边为桥。本题就用tarjan算法求出所有的边双连通分量,然后缩点重新建图就变成了一棵树,点权设置成每个联通分量最大的即可。然后点标号还是原来桥两边的标号,而树上的每一条边都是一个桥, 考虑每条边的输出,删除某一边后肯定会出现两个联通分量, 需要记录两个联通分量中最大的点max1 max2, 如果max1!=n 则答案就是max1 max1+1否则max2 max2+1。因此只需要从n节点开始dfs一遍求出以每个节点为根的子树的最大点权值就可以了。题解参考这里

HDU 5410 CRB and His Birthday(完全背包) 题意:CRB生日,妈妈要给他买礼物,妈妈有M元钱,这家店有N种礼物,因为店长和妈妈是熟人,所以若第i种礼物买x件的话,店长会给妈妈Ai*x+Bi颗糖果,现给出每种礼物的单价、Ai值与Bi值,问妈妈最多能拿到多少颗糖果。显然是完全背包的问题。主要在于买一件和不买的区别是a[i]+b[i],而买一件和买多件的差别是a[i]。题解参考这里

HDU 5411 CRB and Puzzle(矩阵快速幂)题意:给定n个点 常数m,下面n行第i行第一个数字表示i点的出边数,后面给出这些出边。问:图里存在多少条路径使得路径长度<=m,路径上的点可以重复。我记得离散课上讲过这个。。。就是A+A^1+A^2+...+Am-1的总共的1的数量?。。。矩阵快速幂解决。。。题解参考这里

HDU 5412 CRB and Queries(整体二分)题意:带修改(单点更新)的求区间第K大值。题解参考这里

今天的牛客网比赛。。。大佬都去打百度之星了???做了三题荣获前50。。。两道题打表+OEIS,一道题我昨天刚看的知识(棋盘染色)。。。不过能学以致用还真是舒服啊。。。

猜你喜欢

转载自blog.csdn.net/LSD20164388/article/details/81582916