- 博客(110)
- 收藏
- 关注
原创 求N!最后非0位 O(N log N)
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1594直接上代码,此题直接当作模题就好了,感觉不怎么好理解。看了几遍,还是不太能理解。先放这里吧。吉林大学模版:#include#define maxn 10010using namespace std;const int mod[20]={1,1,2,6,4,2,2,
2015-05-16 00:42:19 782
原创 POJ 2823 Sliding Window 线段树求解
题目链接:http://poj.org/problem?id=2823题意:就是求区间最小值。此题,显然可以用线段树过,但是,知道此题是学习滑动窗口时。此题用滑动窗口做的话比较省代码,内存和时间。但是要是真正到了赛场上,可能真的不太能想起用滑动窗口,而且对单调队列也不是很熟悉。写一下线段树也还是不错的。代码:#include#include#include#defin
2015-05-10 19:52:32 609
原创 POJ 2823 Sliding Window 滑动窗口 单调队列优化
题目链接:http://poj.org/problem?id=2823灵感来源:单调队列初步为什么说是灵感来源呢,看了紫书上的代码,知道了单调队列的意思,而且有两种解法,一种是用C++的set,复杂度是O((N-k) log k),然后百度到了此题,为了方便用来set,然后果断TLE。就试着写单调队列,可是却写不出来。。百度到这篇博客后,第一次随便过了一遍,没怎么看懂。没看了。今天再次百度
2015-05-10 18:50:02 1299
原创 UVA 11572 Unique Snowflakes(最长无重复元素问题) 用dp思路
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25998题意:给定一个数组,求最长的一个连续的子序列,使得该序列中没有重复的元素。紫书上用了两种方法,一种是:滑动窗口,还有一种,我就把叫做Dp吧。这里采用的是dp思路:用dp[i]表示以i为结尾的最长连续且没有重复元素的子序列的长度,则状态转移方程为:d
2015-05-08 14:02:01 620
原创 UVA 11054 Wine trading in Gergovia (酒的交易问题)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21418紫书P237的例题8--5。英文没看。题意:紫书上用的是动态处理,内存几乎为零。不过,我没那么强,还是用自己方式写吧。用dp[i]表示i为最后一个的需求量。则状态转移方程为:dp[i]=dp[i+1]+A[i]。实质就是价值的转移。即紫书说的价值转换。
2015-05-08 13:28:06 568
原创 HDU 2689 Sort it 归并排序求逆序对
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2689思路:就是归并排序啦。在归并排序的同时,记录逆序对就行了。时间复杂度即为归并排序的复杂度:O(N log N)。代码:#include#include#define maxn 100010using namespace std;int N,A[maxn],T[maxn],a
2015-05-08 10:25:48 784
原创 所谓的归并排序
归并排序:以前学过归并排序,把意思看懂了,但要是自己写代码实现,那是真的不会,现在看了紫书上的代码,现在真的是豁然开朗,看这个的原因是也是为了实现逆序对的O(N log N)实现。思路:其实,归并排序的实质就是二分,我们对二分并不陌生,经常用二分来查找某个值,我们可以把这个值称为二分的“附加值”(即:我们的目的),同样的在归并排序中,这个“附加值”不再是某个值,而是某个过程,这个过程就是“
2015-05-07 23:08:48 795
原创 HDU 1003 Max Sum 最大子段和dp解题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003题意:给定一个数组,求最大的连续的一段和值(最大子段和)。Dp思路:用dp[i]表示以i结尾的最大最大子段和,则状态转移方程为:dp[i]=max(dp[i-1]+A[i],A[i]),这个很好理解。做了这题就可以做HDU1024的升级版最大子段和了。遗憾的是,我居然反过来了,导致HDU1
2015-05-07 21:04:23 920
原创 怎样k^N的最高位
思路:k^N=10^(N lg k)。令:N lg k=a+b。其中:a为 N lg k的整数部分,b为小数部分。则所求最高位有10^b的首个非零数决定。在转换时的注意精度处理,最好把double与long long 相互转换,精度会损失少些,与Int可能会出错。
2015-05-06 17:39:42 567
原创 矩阵加速递推(XDU 斐波那契数列为列)
题目链接:http://acm.xidian.edu.cn/problem.php?cid=1005&pid=4这是XDU校网络塞的一道题目,斐波那契数列。。。看到给出的数据那么大,心想,既然给出了Mod,说不定有一个循环节呢,可是直到N达到10^6都还没有出现循环节,只有放弃了,然后觉得可以解线性递推式的特征根来求解,简单化了几下,感觉不妥,然后放弃了。后来白神说,这题可以用矩阵加速,感谢白
2015-05-06 17:18:47 944
转载 N!的最末位非零数
N!的最末位非零数(原帖) 给定一个数N(N 在N很小的情况下,有一个简便的方法:求出1到N之间每个数的2的因子数和5的因子数,记为F(2)和F(5),显然F(2) >= F(5)。由于在末尾只有2和5相乘才能产生0,如果我们把2和5抛去,那么肯定不会有0,这样就可以一边乘一边模10,防止溢出。剩下的一堆2和5如何处理呢?因为2肯定比5多,因此最末位肯定是偶数(0的阶乘和1的阶乘除外
2015-05-04 23:35:00 628
原创 PKU 1401 Factorial 有一个计算公式
题目链接:http://poj.org/problem?id=1401题意:求N!的末尾0的个数。思路:这算是一个数学公式求解型的问题。方法是,给定一个数N,结果就是: [N/5]+[N/25]+[N/125]+............+[N/(5^k)],其中5^k为不大于N的最大的数。具体原理自行百度即可。代码:#includeusing namespace std;i
2015-05-04 22:57:09 460
原创 CSU 1592 石子归并 相邻操作Dp问题
题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1592题意:给定一堆石子,每次只能合并相邻两堆,每次的合并代价为两者石子数之和,求最后只剩下一堆时的最小合并代价。刚开始,想到的是贪心,每次合并相邻和值最小的两堆就行了,这题和 POJ 3186 Treats for the Cows以及紫书上的“最优矩阵链乘”差不多,初看看似贪
2015-05-04 17:05:19 778
原创 POJ 3186 Treats for the Cows 简单dp
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966#problem/O题意:给定一个数组,每次只能从首或位取一个数,每个数的权值为取该数的序数,求所能使所有数乘上他的权值的和值最大,并求出该最大和值。虽然说是简单dp,但是,还是百度了一下,说是枚举数组的位置,然后就很容易想到状态转移方程了。思路:用dp[i]
2015-05-04 16:24:01 669
原创 POJ 3616 Milking Time 排序Dp
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966#problem/R题意:给定一个区间和若干个子区间,求没有重叠区间的最大和值。这题没啥说的,直接排序一下,就变成类似于紫书上所说的DAG上的最长路问题了。代码:#include#include#include#define maxn 101
2015-05-03 18:01:19 574
原创 POJ 1458 Common Subsequence 最长公共子序列问题
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966#problem/L题意:求两个字符串的最长公共子序列的长度。用dp[i][j]表示:在两个字符串中的位置,则状态转移方程为:dp[i][j]=max(max(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1]+1(if(a[i]==b[j])
2015-05-03 16:14:17 477
原创 HDU 1176 免费馅饼 树上的dp
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966#problem/G题意:给定一个数轴,然后在不同的时间有馅饼落在每个点上,求怎样才能是接收到的馅饼最多。树上的动态规划,看见别人这样说,也许是因为他的状态转移类似于树吧。状态转移挺简单的:当前状态只能由自己或是相邻的位置转移得到。代码:#in
2015-05-03 00:31:43 484
原创 HDU 1114 Piggy-Bank 背包dp
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966#problem/F题意:给定不用型号的硬币(重量和面值),然后给出一定重量,求最小面值。每种硬币的数量无限。思路:既然每种硬币的数量无限,那么我们取之前与取之后硬币的状态相当于不变。既然各种硬币的型号一定,那么实际上就至于给定的重量有关了。假设当前的重量为W,那
2015-05-02 23:13:17 547
原创 HDU 1087 Super Jumping! Jumping! Jumping! 简单Dp
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966#problem/E题意:给定一个数组,然后求一个上升序列,使得该序列的和值最大。可以说就是一个最长上升子序列的问题,只是我们把维护长度变成了维护和值而已。代码:#include#include#include#define maxn 101
2015-05-02 00:38:07 417
原创 HDU 1074 Doing Homework 状压Dp
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966#problem/D题意:给定各个科目的截至时间和完成该科目所需要的时间,求最小逾期值。刚开始拿到该题目,不知道思路,百度才反应过来,科目为15明显是状压Dp的标志嘛。。。。然后终于写出来了。。。好费劲啊。。。太弱了。。代码:#include
2015-05-02 00:18:48 613
原创 HDU 1069 Monkey and Banana Dp问题
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966#problem/C题意:给定一些长方体的尺寸,数量都是无限个,然后求这写长方体能堆切成的最大高度。PS:接触面的上面必须严格小于下面的面。这题和紫书P269的巴比伦塔例题差不多,可以说是一模一样,紫书上把这种题型叫DAG上最长路。看了别人的代码AC的。思路:
2015-05-01 21:30:42 575
原创 HDU 1029 Ignatius and the Princess IV 这题有点蛋疼
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68966#problem/B题目没有给出每个数的大小,搞的不敢开常数数组。看到别人开个5000的计数数组就过了。。。看着N达到了999999,心想map肯定会TLE吧,MD,看到别人map也顺利AC,看来我对1s的数量级还是不太能理解啊。。。。代码:#includ
2015-05-01 19:22:40 451
原创 XDU 易碎的鸟蛋(鹰蛋实验) Dp问题
题目链接:http://acm.xidian.edu.cn/problem.php?id=1007题意:给定鸟蛋的数目和楼层数,确定鸟蛋的硬度。这应该是一个比较经典的Dp了,看了别人朱晨光的论文,也就只能写个N^2 long N的算法了。朱晨光论文链接这篇文章让我懂了 log N的意思:鹰蛋实验自己的理解:首先题目给定的有两个变量,我们可以很容想到一个式子:dp[i][j],但
2015-05-01 16:15:33 1747
原创 ZOJ 1610 Count the Colors 线段树区间染色问题
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66989#problem/F题意:给一个区间范围,然后逐步给某些区间染色,最后问能各种能看见的颜色的块数。典型的线段树染色问题,看了别人的代码不太能理解。但是想到了一个不错的思路。解题思路:我们可以这样想,显然每条线段最后的颜色都由改线段最后一次的染色决定,如果我们把每一
2015-04-30 12:47:07 1245
原创 XDU 1024: 最优规则式
题目链接:http://acm.xidian.edu.cn/problem.php?id=1024解题思路请看:http://blog.csdn.net/u014800748/article/details/45318353代码:#include#include#include#define maxn 100010using namespace std;int n,A[m
2015-04-29 17:03:29 559
原创 POJ 3468 A Simple Problem with Integers 线段树维护动态区间和
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66989#problem/C题意:给定一个数组,然后动态修改某些区间的值,并询问某些区间的和。思路:既然是线段树专题,那就用线段树了。这是一个标准的线段树维护动态区间和问题,很显然,我们需要维护的是这些连续区间的和,当我们对某个子区间进行add操作时,必然会对这个子区间的
2015-04-28 13:14:45 521
原创 HDU 1754 I Hate It 线段树点修改问题
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66989#problem/B还以为是英文题目,点开一看居然是中文题目。给定学生的成绩,期间会动态修改某个学生的成绩,询问某个区间的最大分数。是一个标准的用线段树动态维护区间最大至问题。代码:#include#include#include#defin
2015-04-27 20:08:44 626
原创 XDU 挖掘机 线段树求解
题目链接:http://acm.xidian.edu.cn/problem.php?cid=1002&pid=1看到别人有O(N)的解法(不会),不过这里用线段树,练习线段树。用线段树维护变量:于最后我们只需要知道每一个点的修改次数,所以,我们只要记录每个区间被修改的次数就好了,最后查询时,在从上到下记录下修改的值就好了。代码:#include#include#defi
2015-04-27 19:25:10 584
原创 HDU 1166 敌兵布阵 线段树求解
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66989#problem/A题意:动态修改某个点的值,然后动态询问区间和。标准的线段树点修改问题,以前做过,第一次看着别人的代码用线段树水过了,后来还用树状数组做过(现在不记得树状数组了。。。。),现在再次用线段树写,当然这次是独立写的。题意本身不难,但是有一个值的注意,
2015-04-27 14:56:36 403
原创 POJ 2031 Building a Space Station Kruskal最小生成树
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/C题意:大意是,给定一些空间站,把空间站当作球来处理,然后给定每个空间站的描述,球心坐标和半径,求两两连通的最小代价。两个求相连通的条件是:1:相互相连或是重叠(直接相连)2:通过第三者相连(间接相连)思路:把直接相连的用并查集预处理就行
2015-04-26 22:56:05 678
原创 POJ 1287 Networking Prim模型
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/B思路:题意简单,直接Prim求解。代码:#include#include#include#define INF 0x7fffffffusing namespace std;int Map[60][60],dis[60],v
2015-04-26 22:12:17 599
原创 POJ 1258 Agri-Net Prim算法模型
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/I题意:求连通的最小fiber,就是MST的叙述。由于是以表格的形式给出,所以用Prim比较方便,当然用Kruskal也不麻烦。代码:#include#include#include#define INF 0x7ffffff
2015-04-26 18:00:08 511
原创 POJ 1751 Highways Kruskal求解
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/H题意:修高速公路问题,求最小连通造价,但是会给出一些已经修好了的边,求需要修剪的边。思路:这题和POJ 2412 Constructing Roads差不多,用Kruskal逐条加边,只是把Kruskal的求sum值改成存储边值就好了。
2015-04-26 01:18:20 599
原创 POJ 2421 Constructing Roads Kruskal求解
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/D题意:给定一些村庄及边,然后给出一些,已经存在的边,求最小生成树。思路:题意简单,根据Kruskal思路,先把已经存在的边加进去,然后就是原样的Kruskal了。代码:#include#include#includeus
2015-04-26 00:23:20 524
原创 POJ 1679 The Unique MST Pim算法求解
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/K题意:给定一个无向图,判断该图的最小生成树(MST)是否唯一。思路:刚开始想的是学会Kruskal就好了,Prim算法没必要再写了吧,但是,这题明显用Prim简便了许多,所以有看了下Prim算法,算是对Prim彻底理解了。根据Prim求最小生成
2015-04-25 23:57:17 693
原创 最小生成树的两种算法:Prim和Kruskal算法
越来越明白了一个道理:你写不出代码的原因只有一个,那就是你没有彻底理解这个算法的思想!!以前写过最小生成树,但是,水了几道题后,过了一段时间,就会忘却,一点也写不出来了。也许原因只有一个,那就是我没有彻底理解这两种算法。主题:其实,求最小生成树有两个要点,一个是权值最小,还有一个就是这个图必须是树。而Prime和Kruskal的不同之处在于两者选择的变量不同,Prime选择的是始终保持
2015-04-25 22:42:28 3446 1
原创 HDU 1301 Jungle Roads Kruskal求解
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/M题意:热带的一个国家还是啥的,需要维护network,求最小维护费用问题,几乎就是最小生成树意思。思路:Kruskal求解,没啥亮点,可以用map方便的把字符整型化。也可以用字符减去'A'。代码:#include#includ
2015-04-25 20:29:47 562
原创 HDU 1875 畅通工程再续 Kruskal求解
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/N题意:给点每个点的坐标及连通条件,求最小代价。这题真的傻逼了,我居然,直接把距离平方进行相加,真是醉了。。。。其他没啥值的注意的地方。PS:看到有人double的输出用的是%lf也可以AC,但是,还是的注意一下,double的输出使用%f,
2015-04-25 19:54:47 447
原创 HDU 1233 还是畅通工程 Kruskal求最小成树
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=66965#problem/L题意:就是并查集题意。某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的
2015-04-25 18:13:02 458
原创 ZOJ 3261 Connections in Galaxy War 反向用并查集
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3563题意:银河系中,星球受到怪兽的侵略,一个星球需要向防御能力比他强且与他相连的星球求救,问是那个星球?但是,其中的某些边可能会受到破坏。思路:这个算是一个反向思维吧,只要知道反向操作后,仔细一想,就会发现,顺序操作是删边,反向操作的就是加边,而逐一加边这一操
2015-04-24 18:29:21 533
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人