摘要: 链接 https://www.luogu.com.cn/problem/P5018 思路 简单的递归,极致的享受。 就是判断左子树的右子树和右子树的左子树是否一样,用递归就行,加上点剪枝。 我感觉复杂度是N^2, 评论区给出的证明说是nlogn,看不懂,贴在下面。 但是能过就行 代码 #includ 阅读全文
posted @ 2025-03-07 11:59 WHUStar 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 链接 https://www.luogu.com.cn/problem/P3931 思路 树形dp。思路简单:使用dp[x]记录删掉以x为根节点的子树 包含的所有叶子节点 所需的最小代价,那么dp[x] +=min(dp[son],cost[x][son])。还有要注意的点就是不能直接用cost存, 阅读全文
posted @ 2025-03-07 11:26 WHUStar 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 链接 https://www.luogu.com.cn/problem/P2014 思路 树形dp。 要点: dfs给所有节点重编号 dp[i][j]为:以第i个子节点为根节点时 选j个它的子节点(不是子树节点)的最大学分 即f[i][j]=max/min(f[i][j],f[i][j-k]+f[儿 阅读全文
posted @ 2025-03-07 09:38 WHUStar 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 链接 https://www.luogu.com.cn/problem/P1169 思路 刚开始想用类似深搜的方法:搜到一个块,然后用扫描线。 结果感觉太麻烦 (而且没有用到标签的dp),看了下题解用的是悬线法 (和扫描线也差不多嘛)。 大概的思路就是通过计算一个点向左最多能达到多远,向右最多能达到 阅读全文
posted @ 2025-03-06 10:44 WHUStar 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 链接 https://www.luogu.com.cn/problem/P1220 思路 之前想错了:直接用dp[i][j]表示消除ij内的代价。但是还得再加一维度:即dp[i][j][0]表示消除之后处在左端;dp[i][j][1]表示消除后处在右端。 很显然,消除完了之后只可能处于两端,不可能路 阅读全文
posted @ 2025-02-28 11:53 WHUStar 阅读(6) 评论(0) 推荐(0) 编辑
摘要: 链接 https://www.luogu.com.cn/problem/P1174 思路 刚开始的思路:设置dp[i][j]:前i列使用了j颗子弹,那么递推dpi,j=max(dpi,j,dpi-1,k+maxj-k),然后统计在第i列使用了j-k颗子弹会多出来多少颗,把这些遍历加到前面,见代码。喜 阅读全文
posted @ 2025-02-25 20:44 WHUStar 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 原理: 结论: 阅读全文
posted @ 2025-02-22 14:52 WHUStar 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 链接 https://www.luogu.com.cn/problem/P1136 思路 一道有点恶心的dp。 设dp[i][j][k][0]:前i个字符,改动了j个j(为z),k个z(为j),并且以j为结尾。 dp[i][j][k][0]:前i个字符,改动了j个j(为z),k个z(为j),并且以z 阅读全文
posted @ 2025-02-22 14:51 WHUStar 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 链接 https://www.luogu.com.cn/problem/P3386 思路 模版代码,重点在二分图和匈牙利算法这个知识点 代码 #include<bits/stdc++.h> using namespace std; #define IOS ios::sync_with_stdio(f 阅读全文
posted @ 2025-02-20 16:52 WHUStar 阅读(1) 评论(0) 推荐(0) 编辑
摘要: 链接 https://www.luogu.com.cn/problem/P1108 思路 最长不降子序列。用dp方法是n2;非dp方法是nlog2n。这里只能用dp方法,因为要统计有多少个。 具体思路就是用两个数组:f[N],c[N]。前者:正常记录最长子序列:fi = max{fj+1},i>j& 阅读全文
posted @ 2025-02-20 14:06 WHUStar 阅读(4) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示