摘要: 1 /* 2 把一个字符串分成若干段,每一段里面的字符不能重复,问有多少种分法 3 动态规划,定义dp 表示字符串前n个字母的分法种数,先预处理字符串,对于每个字符, 4 计算出以这个字符为结尾的无重复字符的一段最长的长度,第i个字符对应的长度记为f[i] 5 然后可以得出递推式: 6 dp[0]=1; 7 dp[i]=dp(i-j) (1 10 using namespace... 阅读全文
posted @ 2017-07-20 22:18 Kearon 阅读(507) 评论(0) 推荐(0) 编辑
摘要: 解题思路: 先将y轴进行离散化。n个矩形的2n个横边纵坐标共构成最多2n-1个区间的边界,对这些区间编号,建立起线段树。 x轴记录左边和右边,左边时是矩形面积增加,覆盖层数增加边,右边是形面积减少,覆盖层数减少边。 阅读全文
posted @ 2017-05-31 18:58 Kearon 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 解题思路: 一共有1e7块砖如果每个叶子节点都代表一块瓷砖,那么线段树会导致MLE,即单位区间的数目太多。而且建树复杂度O(m),查询复杂度为 nlogm (n是海报数目m是瓷砖数目)。 可是最多有1e4张海报所以最多有2e4个端点,而这些端点最多能把墙分成2e4+1段,对这些段进行编号做离散化处理 阅读全文
posted @ 2017-05-06 14:03 Kearon 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 解题思路: 标准的区间更新。 树节点如果只存和会导致每次加数的时候都要更新到叶子节点,速度太慢(O(nlogn)) , 所以树节点应该存原来初始的和nsum和当刚好是这段区间所累加的和lnc。本节点区间的和实际上是nsum+lnc*(R-L+1)。 每次插入将路过的节点中的nsum加上插入的c*(r 阅读全文
posted @ 2017-05-01 14:46 Kearon 阅读(173) 评论(0) 推荐(0) 编辑
摘要: POJ3264原题 传送门:http://www.cnblogs.com/kearon/p/6739098.html 阅读全文
posted @ 2017-04-22 10:26 Kearon 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 解题思路: 先用数组累计从1~n的杀敌数,所以从i~j的杀敌数就是sum[j]-sum[i-1]; 进行加的时候再用线段树进行单点更新m次时间复杂度就是O(mlogn) 查找时先从累加数组中计算出最开始的杀敌数再去线段树中计算后来的杀敌数 m次时间复杂度就是O(mlogn) 阅读全文
posted @ 2017-04-22 10:24 Kearon 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 解题思路: 从1开始深度优先遍历整个图,找到所有能到达N的走法,但是如果当前已经找到的最优路径长度为L,那么以后总长度已经大于L的走法就可以直接放弃。用midL[k][m] 表示:走到城市k时总过路费为m的条件下,最优路径的长度。若在后续的搜索中,再次走到k时,如果总路费恰好为m,且此时的路径长度已 阅读全文
posted @ 2017-04-20 15:46 Kearon 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 解题思路: 利用深度优先搜索找到经历1到n-1的路径然后再从n-1到n,结合最优性剪枝。 如果当前已经找到的最优路径时间为T,那么以后总时间已经大于T的走法就可以直接放弃。 如果之前到达某个状态比这次花费的时间要少,则剪枝。 如何表示某个状态呢,该状态可以去掉1和n,只与当前所在城市和走过的城市有关 阅读全文
posted @ 2017-04-20 15:45 Kearon 阅读(995) 评论(0) 推荐(0) 编辑
摘要: 解题思路: 用一个数组存放线段树。根节点下标为0。假设线段树上某节点下标为i, 则: 左子节点下标为 i *2+1 右子节点下标为 i*2+2 由二叉树的定义可知叶子节点为n个时至多需要4n-1个节点 阅读全文
posted @ 2017-04-20 15:41 Kearon 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 第一题 第二题 第三题 第四题 用深搜没跑出来答案,过两天补上 考试的时候用深搜搜格子,画重点 这是误区。(2017-4-10) 这两天想到不应该涂格子而是应该把边当成走廊,因为剪出的是中心对称,所以必定经过(3,3) 所以可以从(3,3)开始出发两个人以中心对称的方式出发,当走到边界的时候两个人走 阅读全文
posted @ 2017-04-08 23:45 Kearon 阅读(26552) 评论(6) 推荐(2) 编辑