02 2025 档案
摘要:链接 https://www.luogu.com.cn/problem/P1220 思路 之前想错了:直接用dp[i][j]表示消除ij内的代价。但是还得再加一维度:即dp[i][j][0]表示消除之后处在左端;dp[i][j][1]表示消除后处在右端。 很显然,消除完了之后只可能处于两端,不可能路
阅读全文
摘要:链接 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颗子弹会多出来多少颗,把这些遍历加到前面,见代码。喜
阅读全文
摘要:链接 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
阅读全文
摘要:链接 https://www.luogu.com.cn/problem/P3386 思路 模版代码,重点在二分图和匈牙利算法这个知识点 代码 #include<bits/stdc++.h> using namespace std; #define IOS ios::sync_with_stdio(f
阅读全文
摘要:链接 https://www.luogu.com.cn/problem/P1108 思路 最长不降子序列。用dp方法是n2;非dp方法是nlog2n。这里只能用dp方法,因为要统计有多少个。 具体思路就是用两个数组:f[N],c[N]。前者:正常记录最长子序列:fi = max{fj+1},i>j&
阅读全文
摘要:链接 https://www.luogu.com.cn/problem/P1092 思路 一道dfs的题目。思路就是从低位到高位枚举排列,然后剪枝。 注意细节:1.保留进位;2.枚举低位到高位,大数到小数。 但是这个代码有个点过不了,用的特判→_←。 代码 #include<bits/stdc++.
阅读全文
摘要:链接 https://www.luogu.com.cn/problem/P1073 思路 刚开始的思路是tarjan:缩点,统计每个强联通分量的min和max。然后再根据有向图去求答案。但是这样太过于繁琐,所以采用分层图的办法。这篇题解讲的已经够详细了:https://www.luogu.com.c
阅读全文
摘要:链接 https://www.luogu.com.cn/problem/P1121 题目 思路 这个O(n)的思路很好:https://www.cnblogs.com/kamimxr/p/11438701.html。 关键思路: 答案分两种情况,一种是选择的两段均不跨越n到1(也就是环),另一种是选
阅读全文
摘要:链接 https://www.luogu.com.cn/problem/P1119 题目 知识点 floyd算法 思路 看题解,讲的差不多,本篇就是记录下写过的题。 唯一要注意的就是当遍历k(本代码用cnt代替)时,ij都要从0取到n-1。 代码 #define _CRT_SECURE_NO_WAR
阅读全文
摘要:链接 https://www.luogu.com.cn/problem/P1107 题目 思路 因为在取h+delta的max时会一直遍历,所以直接加个记忆,就不用一直遍历了。 代码 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #includ
阅读全文
摘要:链接 https://www.luogu.com.cn/problem/P1099 题目 思路 思路对的,有些地方想的不严谨,但是看评论区证了。 题目有提示:虽然核不唯一,但是最小偏心距唯一。所以想到先找直径,然后再遍历求解。 比如这张图来说,对于i,j两点很显然只要满足|dist[j]-dist[
阅读全文
摘要:链接 https://www.luogu.com.cn/problem/P1064 题目 思路 刚开始想复杂了:想象多棵树的dp。但是实际上由于最多只有两个子节点,所以可以直接用分组dp:把每棵树变成1/2/4的“合体”选择版。 比如如果只有一个主元件,那么就添加一个物品。如果有一个主元件加上一个附
阅读全文