随笔分类 -  DP

摘要:原题链接 这是一道基础的树形DP 题意: 给你一棵树,让你找两条不相交的路径,使得它们长度的乘积最大 思路:由于N只有$200$,因此直接枚举删掉哪一条边,然后分别求两棵树的直径$d1, d2$,然后对$d1 * d2取max$即可 代码如下 int h[N], e[M], ne[M], idx; 阅读全文
posted @ 2021-04-16 18:58 beatlesss 阅读(77) 评论(0) 推荐(0)
摘要:原题链接 这题自己sb,后面s数组没有加够,出现了空值,调了老半天,我是sb。 题意: 给你n个结点,权值1~n,问你最多能组成多少棵深度不小于 k 的二叉搜索树。 思路:大的树是由小的树构成的,因此可以递推(DP)。详情见代码,有注释。 代码如下 int n, h; ull ans; ull f[ 阅读全文
posted @ 2021-04-06 13:42 beatlesss 阅读(70) 评论(0) 推荐(0)
摘要:原题链接 这题自己写状压是没问题,但是细节没把握好,wa了,然后参考了大佬的博客. 据说这题还可以暴搜实现,懒得想了(说不定剪枝啥的不好想)。 题意: 一个女孩整理箱子,箱子的位置不可以改变,告诉你箱子和每个行李的位置,她一次可以拿两个或者是一个行李,女孩移动时间花费是她移动距离的平方,求最小花费时 阅读全文
posted @ 2021-04-06 00:27 beatlesss 阅读(71) 评论(0) 推荐(0)
摘要:原题链接 这题对我这个菜鸡来说,实在是太难了,捣鼓了半天才看懂大佬的代码。 题意:给你一个环,环上每个点都有一个权值$h_i$让你求出有多少数对$(i, j)$,存在一条从$i$到$j$的弧满足弧上的所有数都小于等于端点$h_i和h_j$. 思路:首先遇到的就是对环的操作,很显然直接在环上操作是不那 阅读全文
posted @ 2021-04-04 02:49 beatlesss 阅读(115) 评论(0) 推荐(1)
摘要:原题链接 题意:给你n个二元组和起始条件,求其最大二维上升子序列,并输出选择编号。 思路:按照一个维度排序,然后DP即可,注意细节。 代码如下 int n, w, h; struct node{ int w, h, id; bool operator < (const node &t) const 阅读全文
posted @ 2021-04-03 12:21 beatlesss 阅读(73) 评论(0) 推荐(0)
摘要:原题链接 这题要特判矩阵里有0的情况,我就没特判,一直TLE(自己傻逼) 题意:给你一个矩阵,里面都是非负数,现在让你从$(1, 1)\(走到\)(n, n)$, 并且把路径上的所有数乘起来,问你能得到的数末尾最少有多少个0。 思路:把路径上的每个数含有因子2和5的个数求出来(因为2和5才能凑出0) 阅读全文
posted @ 2021-04-02 23:56 beatlesss 阅读(61) 评论(0) 推荐(0)