04 2016 档案

摘要:首先介绍一下LIS和LCS的DP解法O(N^2) LCS:两个有序序列a和b,求他们公共子序列的最大长度 我们定义一个数组DP[i][j],表示的是a的前i项和b的前j项的最大公共子序列的长度,那么由于是用迭代法,所以计算DP[i][j]前,DP[i-1][j]和DP[i][j-1]就都已经计算出来 阅读全文
posted @ 2016-04-29 14:48 FuTaimeng 阅读(303) 评论(0) 推荐(0)
摘要:一个划分dp,不过由于划分个数任意,仅用一维数组就可以 设dp[i]表示前i个装箱(任意个箱子)的费用最小值 dp[i]=min(dp[u]+cost(u+1,i)) 但是n<=50000,n方的复杂度显然不能接受 设choice[i]数组存下对于每个i值,枚举所得的使f[i]最大的那个u值 打表, 阅读全文
posted @ 2016-04-28 22:11 FuTaimeng 阅读(143) 评论(0) 推荐(0)
摘要:贪心算法,从后往前 来自codevs的题解: 设立一个大顶堆,堆中的元素是当前时间下能打的地鼠的分值把地鼠们按照消失的时间由大到小排序,循环时间temp=最后消失的地鼠的消失时间 to 1把所有消失时间等于temp的地鼠放入堆(表示可以打它们了)然后取出最大的(堆顶)打掉,累加得分即可 代码如下: 阅读全文
posted @ 2016-04-28 13:07 FuTaimeng 阅读(299) 评论(0) 推荐(0)
摘要:稍微复杂一点的划分dp 设f[i][j][k]为第i行前j个k次粉刷正确的最大值 由于每行循环使用,可以去掉第一维,但每次不要忘了清零(卡了好久) f[j][k]=max{ f[u][j-1] + max(u+1到j的蓝色的个数,u+1到j的红颜色的个数) } 设h[i][k]为第i行分成k份的最大 阅读全文
posted @ 2016-04-27 23:03 FuTaimeng 阅读(319) 评论(0) 推荐(0)
摘要:暴力显然不行,所以考虑dp 记f[i][j][k][l]为使用i张1,j张2,k张3,l张4所得到的最大分数。 对于每个f[i][j][k][l],都可以由i-1张1,j张2,k张3,l张4所得到, 或者i张1,j-1张2,k张3,l张4所得到, 或者i张1,j张2,k-1张3,l张4所得到, i张 阅读全文
posted @ 2016-04-26 21:53 FuTaimeng 阅读(400) 评论(0) 推荐(0)
摘要:划分dp 把环变链(读入4 3 -1 2变成4 3 -1 2 4 3 -1 2) 设dp[i][j][k]为把i~j分成k份,各部分内的数字相加,相加所得的k个结果对10取模后再相乘,最终得到的一个数,这个数的最大或最小值。 dp[i][j][k]=max/min{dp[i][p][k-1]+fun 阅读全文
posted @ 2016-04-26 12:46 FuTaimeng 阅读(405) 评论(0) 推荐(0)
摘要:有的时候如果题目的输入是个环,给编程造成麻烦的,可以采用断环为链解决 首先将读入的环中的数添加到数组里,将数组扩大一倍,把所有数据拷贝一份放在后面 比如 4 3 -1 2 那么在数组里存 4 3 -1 2 4 3 -1 2 那么就可以按照链的方式来做了,不会丢失解 code 1085 code 21 阅读全文
posted @ 2016-04-24 16:51 FuTaimeng 阅读(553) 评论(0) 推荐(0)
摘要:Placing Lampposts As a part of the mission �Beautification of Dhaka City�, the government has decided to replace all the old lampposts with new expens 阅读全文
posted @ 2016-04-23 11:14 FuTaimeng 阅读(276) 评论(0) 推荐(0)
摘要:Problem C - Robotruck Background This problem is about a robotic truck that distributes mail packages to several locations in a factory. The robot sit 阅读全文
posted @ 2016-04-22 22:06 FuTaimeng 阅读(653) 评论(0) 推荐(0)
摘要:单调队列的操作 单调队列的操作 举例 举例 不妨用一个问题来说明单调队列的作用和操作: 不断地向缓存数组里读入元素,也不时地去掉最老的元素,不定期的询问当前缓存数组里的最小的元素。 最直接的方法:普通队列实现缓存数组。 进队出队都是O(1),一次查询需要遍历当前队列的所有元素,故O(n)。 用堆实现 阅读全文
posted @ 2016-04-22 21:49 FuTaimeng 阅读(335) 评论(0) 推荐(0)
摘要:Sharing Chocolate Chocolate in its many forms is enjoyed by millions of people around the world every day. It is a truly universal candy available in 阅读全文
posted @ 2016-04-22 19:47 FuTaimeng 阅读(283) 评论(0) 推荐(0)
摘要:一个神奇的算法,在题目中看到的,单独拿出来整理枚举一个集合S(用一个二进制表示)的所有子集S0:for(int S0 = S; S0; S0 = (S0-1)&S){}还有不包括S本身的: for(int S0 = (S-1)&S; S0; S0 = (S0-1)&S){} 阅读全文
posted @ 2016-04-20 21:20 FuTaimeng 阅读(895) 评论(0) 推荐(0)
摘要:问题描述: This is a two player game. Initially there are n integer numbers in an array and players A and B get chance to take them alternatively. Each pla 阅读全文
posted @ 2016-04-20 21:04 FuTaimeng 阅读(205) 评论(0) 推荐(0)
摘要:http://www.cnblogs.com/acm-bingzi/p/3272898.html Hackers’ Crackdown Miracle Corporations has a number of system services running in a distributed comp 阅读全文
posted @ 2016-04-20 17:59 FuTaimeng 阅读(284) 评论(0) 推荐(0)
摘要:【题目描述】:王子和公主 一个王子和公主在n*n的格子中行走,这些格子是有1....n^2的编号的。现在给定p+1个数,再给定q+1个数,公主和王子可以选择其中某些格子行走,求他们最多能走几个相同的格子。 【算法分析】: 这道题读题是关键,然后我们发现需要的是公共的格子,又需要是这个步数最大化,可以 阅读全文
posted @ 2016-04-19 22:23 FuTaimeng 阅读(783) 评论(0) 推荐(0)
摘要:题目大意: N个数排成一圈,第一次删除m,以后每k个数删除一次,求最后一被删除的数。 如果这题用链表或者数组模拟整个过程的话,时间复杂度都将高达O(nk),而n<=10000,k<=10000 目测会直接TLE。 那么有没有其他的方法呢?答案是有的。 我们先忽略掉m, 分析一下每k个数删除一次,那就 阅读全文
posted @ 2016-04-19 21:28 FuTaimeng 阅读(476) 评论(0) 推荐(0)
摘要:来自:http://www.cnblogs.com/hicjiajia/archive/2009/09/27/1574957.html 参考文献:[1]C++程序设计语言(特别版), 裘宗燕译, 机械工业出版社[2]C++ Primer (3rd Ed.), S.B. Lippman and J. 阅读全文
posted @ 2016-04-04 20:36 FuTaimeng 阅读(264) 评论(0) 推荐(0)
摘要:来自:http://www.cnblogs.com/ylfdrib/archive/2010/11/03/1867901.html 对于一棵有根树,就会有父亲结点,祖先结点,当然最近公共祖先就是这两个点所有的祖先结点中深度最大的一个结点。 0 | 1 / \ 2 3 比如说在这里,如果0为根的话,那 阅读全文
posted @ 2016-04-02 21:48 FuTaimeng 阅读(264) 评论(0) 推荐(0)
摘要:并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。一些常见的用途有求连通子图、求最小生成树的 Kruskal 算法和求最近公共祖先(Least Common Ancestors, LCA)等。 使用并查集时,首先会存在一组不相交的动态集合 阅读全文
posted @ 2016-04-02 17:46 FuTaimeng 阅读(155) 评论(0) 推荐(0)