04 2016 档案

摘要:题目来源: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=13893 分析: 首先不难想到枚举“当前点是从上一行哪里来的”,设F[i][j]为走到第i行,第j列的点时的最大开心值,因此有DP方程: F[i][j]=max { 阅读全文
posted @ 2016-04-12 23:33 Krew 阅读(142) 评论(0) 推荐(0)
摘要:题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1266 分析: 第一问是朴素的最短路,因为数据小,Floyd也可(但我还是写了Dijkstra) 然后是第二问:大意就是,在这个图的“最短路图”(即将等长的边也加入最短路树,就成了一个”最短 阅读全文
posted @ 2016-04-09 22:01 Krew 阅读(164) 评论(0) 推荐(0)
摘要:有这样一类LCS问题:它们看上去和传统LCS没有什么不同,但是多了一些奇奇怪怪条件,看上去毫无卵用,但是数据范围却上了一个台阶。 LCS我们除了可以用滚动数组压缩空间外,还有一种转化方法,可以参考这里二楼的回答: "最长公共子序列是否存在低于 O(n^2) 的算法?" 我觉得写得还是不错的。 所以这 阅读全文
posted @ 2016-04-06 22:59 Krew 阅读(538) 评论(0) 推荐(0)
摘要:题目链接 :http://www.lydsy.com/JudgeOnline/problem.php?id=1264 分析: 这个题拿到手时完全蒙蔽,写了个朴素的LCS果断TLE,后来看了某犇的博客,才知道有利用题目性质用树状数组做的方法。 这两天看了LCS问题转化为LIS问题的模型,想了一发: 对 阅读全文
posted @ 2016-04-06 22:57 Krew 阅读(327) 评论(0) 推荐(0)
摘要:LIS问题是经典的DP问题,设F[i]为以i结尾的LIS长度,转移方程为: F[i]=max(0,F[j] | i j,A[i] A[j])+1 不难看出这样的复杂度是O(n^2)的,有的时候实在难以承受。 实际上LIS问题存在O(nlogn)的算法 首先我们肯定这样一个事实: 对于F[i]=F[j 阅读全文
posted @ 2016-04-06 22:33 Krew 阅读(217) 评论(0) 推荐(0)
摘要:对于一个有环的链表,我们可以通过把他的各个值打一个hash来判重,但是有的时候,空间上往往不允许我们这样做。 为此我们可以使用FLoyd判圈算法(又称:龟兔赛跑算法),即选定一个起点,然后让两个值分别迭代,一个每次“跑”一次,另一个“跑”两次,只要跑道有环,它们就一定可以相遇。 这样就把空间复杂度压 阅读全文
posted @ 2016-04-01 21:46 Krew 阅读(148) 评论(0) 推荐(0)
摘要:在输入输出量十分大的时候,为了优化I/O时间,可以编写自己的输入输出函数,原理:逐字符输入输出比有cstdio快。 include include include include include define rep(i,x,y) for (int i=x;i=x;i ) using namespa 阅读全文
posted @ 2016-04-01 20:13 Krew 阅读(330) 评论(0) 推荐(0)