摘要: 满分做法: 手画样例,发现输出的都是以k为根的叶子节点。于是我们按照以下步骤去操作即可: 1.先按以k为根,进行dfs处理。 2.按照节点深度及编号对节点排序,深度越大排序越靠前,深度相同时,编号小的排在前面。 3.依次处理每个节点 ,每次向上蹦,如果碰到以走过的节点或根节点就停止,记录走过的步数。 阅读全文
posted @ 2019-10-21 21:56 lihan123 阅读(418) 评论(0) 推荐(0) 编辑
摘要: 60分做法:直接暴力背包 满分做法: 按照K的因数进行背包即可 阅读全文
posted @ 2019-10-21 20:12 lihan123 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 满分做法: 对于一条链的情况,我们可以隔一个走一个,最后再走回来,如下: 那对于树来说,我们可以直接扩展:如 果当前节点深度是奇数,那么我们在 DFS 前输出这个点,否则在 DFS 完所有孩子之 后再输出这个点。自己手画一下,感觉很对!!! 阅读全文
posted @ 2019-10-21 17:28 lihan123 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 满分做法: 这个状态是我见到过最奇怪的,$f[i][j][l][r]$表示在区间$[i,j]$中取出一些数后,剩下的数值在$[l,r]$范围内的最小代价。因为$w[i] include include include include include include using namespace s 阅读全文
posted @ 2019-10-21 11:31 lihan123 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 满分做法: 有一个专门解决这类问题的算法叫:GarsiaWachs算法。 算法流程:1.从序列开头往后找第一个位置$i$满足$a[i]=a[i]+a[i+1]$,并把合并的值插入到$j$后面。 这样复杂度就降到了$n²$,用vector就可以达到$nlogn$了。(可以用平衡树优化,但我不会┭┮﹏┭ 阅读全文
posted @ 2019-10-21 11:13 lihan123 阅读(240) 评论(0) 推荐(0) 编辑