摘要: 这个题目很有意思,也是一个很好的题目,涉及的知识点比较广,要求较高。题目是这样的,给定你一个n个数的数列,问你有多少个长度为5的上升序列。首先看到有50000,我们就知道肯定不会是DP。(但是不知道为什么我居然在DP优化这个章节里面做到了这个题)由于给的数是在int范围里面的,我们需要首先将其离散化,这样相当于每个数的范围只有5000了。剩下的就是这个题目的最最精华的地方了。其实这里的统计是用树状数组来实现的。但是不是单单由一个树状数组实现的,而是5个。什么意思呢?我们用f[i][j]表示不大于j的长度为i的上升序列有多少个。这样就是一个递推了哦。而对于每一个查询我们都是通过树状数组来实现的, 阅读全文
posted @ 2013-11-10 17:24 092000 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 题意是描述是这样的,给你n个围栏,对于每个围栏你必须走到其边上才可以往下跳,现在问你从初始最高位置的n个围栏,到原点,水平走过的路程最少是多少?其实我可可以这样来考虑问题。由于每次都是从板子的左右两端往下面跳,我们可以从1到n有序的加入每一块板子(相当于对区间染色),加入每块板子查询一下它的两端的下面的点是什么。有了这个操作我们就可以直接预处理出来从每一块板子左右两端跳下来会落在那一块板子上面。那应该用什么办法来实现这个查询和更新呢?显然,线段树。下面我们等于是分别从第n块板子的左右端点往下走,然后求到原点的水平最短路了,直接一遍SPFA搞定。上代码吧,下面省略若干个字。 1 #includ. 阅读全文
posted @ 2013-11-10 17:14 092000 阅读(700) 评论(0) 推荐(2) 编辑