随笔分类 - ACM随笔
记录一些做过的题的解
摘要:题目地址在这儿 求取:以某矩形g[i]为最小值的区间的左右端点,得到一个临时解。所有临时解中的最大值即为解。 求取区间的方法可以用单调栈,也可以用下面这种十分简洁的类似于递归的方法。下面这种解法求出来的区间是开区间,也正是因为开区间,所以跳转很方便。 L[i]是以第i根柱子为最小值的左开区间点。若g
阅读全文
摘要:这题还是有点意思的,有个数据可以试试: 8 7 6 5 6 3 2 4 1。答案是2而非3。问题就在于:拦截系统用完并非消失,以后有可以用的时候还是可以用的。 那么对于每个导弹,贪心地用被利用得已经高度最低的拦截系统去处理它,如果没有能处理的时候就增加个拦截系统。知道思路之后自己写就行了。
阅读全文
摘要:令dp[i]为前i个人买好票的最少花费。 那么这个状态可由2种状态转移而来:1.上一个人和自己组队买票 2.上一个人不和自己组队买票 即可得:dp[i] = min(dp[i-1]+cost[i], dp[i-2]+together[i]);
阅读全文
摘要:令dp[i][j]为i时刻j位置时的最大馅饼量。由于每个状态只能由临近的3个状态转移而来,所以可以较为简单的确定递推式。 第一个要思考的点:正推还是逆推?逆推的好,正推的话不知哪些状态可走,而逆推的话,是在当前状态下确定之前的状态,所以不存在这个问题。 第二个思考的点:为什么答案是dp[0][6],
阅读全文
摘要:需要用线段树维护区间的3个变量: 区间最长的:[左连续前缀、右连续后缀、最大连续子区间] 的元素个数 其中红线左侧的是第m个元素,右侧是m+1个元素。 更新完左右子树想要pushUp操作的时候,父亲的左前缀必然是左子的前缀,若是左子树满了,则左连续可能还要加上右子树的左前缀。同理,父亲的右后缀必然是
阅读全文
摘要:对区间进行操作:操作0是区间内的每个点的值val = int(sqrt(val)); 操作1是查询区间和。 题目链接 因为是区间操作,第一感觉是lazy,但是这题lazy在push_down的时候无法快速的对区间进行更新,所以变成点操作+剪枝。留意到每个点的值必然是正整数,且开根几次之后最终都会稳定
阅读全文
摘要:有两个长度可能是250*250的数字串,串内元素两两不同,求最长公共子串。 常规的O(n^2)解法不论是时间或空间都无法解决,办法是转化成求最长上升子序列。 假设是有串1和串2。先给串1的元素按输入顺序来一个映射,称为映射1。比如说 1 7 5 4 8 3 9 映射成 0 1 2 3 4 5 6。那
阅读全文
摘要:题目链接 问的是n个不一样的数,大小交替,或者小大交替的种类数量。 n个数,想象成[1,n]的自然数即可。 我们假设大小交替得到的长度为i的排列数为dp1[i],小大交替得到的长度为i的排列数为dp2[i],因为是对称的,其实应该有dp1=dp2,我们要计算的总和sum=dp1+dp2。 我们从小到
阅读全文
摘要:最短路径, Disjkstra算法变形, PATL2-001.紧急救援
阅读全文
摘要:求最长公共子串 Longest Common Subsequence
阅读全文

浙公网安备 33010602011771号