上一页 1 ··· 23 24 25 26 27 28 29 30 31 ··· 38 下一页
摘要: http://poj.org/problem?id=1699DFS+剪枝解法http://www.cnblogs.com/E-star/archive/2012/08/10/2631584.html题意:现在给出几个基因片段,要求你将它们排列成一个最短的序列,序列中使用了所有的基因片段,而且不能翻转基因。,这些基因可以重叠,只要一个基因的后段和一个基因的前端一样,就可以将其重叠链接在一起。现问将这些 基因全部排列出来,最短的长度为多少。思路:将n个基因片段的所有状态压缩,dp[i][j]表示状态i以j基因片段结尾的最短长度,则有dp[i][j] = min(dp[i][j],dp[tmp][k 阅读全文
posted @ 2012-08-10 18:14 E_star 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 官方解题报告http://page.renren.com/601081183/note/865145486?null&ref=minifeed&sfet=2011&fin=0&ff_id=601081183&feed=page_reblog&tagid=1981432999&statID=page_601081183_2&level=21001 hdu 4350Cardhttp://acm.hdu.edu.cn/showproblem.php?pid=4350题意:给定52张牌,按顺序排列着,给出操作每次讲下表为[l,r]的牌一道 阅读全文
posted @ 2012-08-10 11:55 E_star 阅读(272) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1699题意:现在给出几个基因片段,要求你将它们排列成一个最短的序列,序列中使用了所有的基因片段,而且不能翻转基因。,这些基因可以重叠,只要一个基因的后段和一个基因的前端一样,就可以将其重叠链接在一起。现问将这些 基因全部排列出来,最短的长度为多少。思路:给出的数据量比较小相信爆搜+剪枝是可以的。首先是要预处理一下每两个基因片段合并时能够增加的长度,便于以后dfs时,直接求和就可以。View Code #include<iostream>#include<cstdio>#include<cstring>#i 阅读全文
posted @ 2012-08-10 11:40 E_star 阅读(248) 评论(0) 推荐(0) 编辑
摘要: zoj 3366http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3366第一次接触三分,二分法作为分治中最常见的方法,适用于单调函数,逼近求解某点的值。但当函数是凸性函数时,二分法就无法适用,这时三分法就可以“大显身手”~~此题题意:给出灯泡的高度H,人的高度h,以及灯泡与墙之间的距离求人形成影子的最大长度;思路:这里人的影子的长度分地上与墙上两块,首先当灯,人的头部和墙角成一条直线时(假设此时人站在A点),此时的长度是影子全在地上的最长长度,当人再向右走时,影子开始投影到墙上,当人贴着墙,影子长度即为人的高度。所以当人从A 阅读全文
posted @ 2012-08-09 20:28 E_star 阅读(286) 评论(0) 推荐(0) 编辑
摘要: http://www.matrix67.com/blog/archives/115求next函数模板:void GetNext(char *s){ int len = strlen(s); int i,j; i = 0; j = -1;//j从0开始,i从1开始 next[0] = -1; for (i = 1; i < len; ++i) { while (j > -1 && s[j + 1] != s[i])//不相同的话j就跳跃知道相同或者成为-1 j = next[j]; if (s[j + 1] == s[... 阅读全文
posted @ 2012-08-03 16:15 E_star 阅读(243) 评论(0) 推荐(0) 编辑
摘要: pku 1961http://poj.org/problem?id=1961题意:给定一个长度为n的字符串,求他的前缀且前缀满足本身为周期字符串。例:aabaabaab 长度为9 周期为3思路:kmp几乎忘干净了,开始学的时候也没有真正的理解,今天看了好长时间的getnext函数;我们在对字符串本身处理得到next函数时,next[i]记录的就是s[1,next[i]] 与s[i - next[i] + 1,i]相同时的值,这里next[i]也表示了相同区间的长度,我们的坐标从0开始则只要(i + 1)%(i - next[i]) == 0就能满足该字符串前缀是周期字符串,i+1表示的是当前枚 阅读全文
posted @ 2012-08-03 16:06 E_star 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 1004 hdu 4334http://acm.hdu.edu.cn/showproblem.php?pid=4334题意:给定五个集合,从五个集合中分别取出5个数,如果存在满足a1 + a2 + a3 + a4 +a5 == 0 输出yes,否则no; 集合的大小小于200 ai的取值为[-10^15, 1 0^15]思路:开始的时候O(n^2)求出前两个集合的所有可能的和,然后O(n^3)+二分log(10^4)做,结果竟然tle。。坑爹啊。。。。最后用了hash过的。好像poj有个类似的题目,也是hash做的。hash开散列两种实现方式,挂链:View Code #include < 阅读全文
posted @ 2012-08-03 13:40 E_star 阅读(328) 评论(2) 推荐(0) 编辑
摘要: 欧拉函数:定义:用于计算 p(n),比n小的所有与n互质的数。计算公式:p(n)=n*(1-1/p1)*(1-1/p2)....*(1-1/pk)【p1,p2,pk都是n的素因子】另:若n=p1^q1*p2^q2*.....*pk^qk则,p(n)=(p1-1)*p1^(q1-1)*(p1-1)*p2^(q2-1)......*(pk-1)*pk^(qk-1)性质:若m,n互质,φ(mn)=φ(m)φ(n)。当n为奇数时,φ(2n)=φ(n)欧拉定理:a,m互质,a^φ(m)≡1(mod m)例:2,3互质,那么,2^2%3=1推论:对于互质的数a、n,满足a^(φ(n)+1) ≡ a (mo 阅读全文
posted @ 2012-08-03 09:31 E_star 阅读(1071) 评论(0) 推荐(0) 编辑
摘要: 欧拉函数:定义:用于计算 p(n),比n小的所有与n互质的数。计算公式:p(n)=n*(1-1/p1)*(1-1/p2)....*(1-1/pk)【p1,p2,pk都是n的素因子】另:若n=p1^q1*p2^q2*.....*pk^qk则,p(n)=(p1-1)*p1^(q1-1)*(p1-1)*p2^(q2-1)......*(pk-1)*pk^(qk-1)性质:若m,n互质,φ(mn)=φ(m)φ(n)。当n为奇数时,φ(2n)=φ(n)欧拉定理:a,m互质,a^φ(m)≡1(mod m)例:2,3互质,那么,2^2%3=1推论:对于互质的数a、n,满足a^(φ(n)+1) ≡ a (mo 阅读全文
posted @ 2012-08-03 08:36 E_star 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 1001 hdu 4320 http://acm.hdu.edu.cn/showproblem.php?pid=4320题意:V写下一个A进制的任意有限小数,如果S能将其翻译成B进制的有限小数,则S赢,输出Yes 否则V赢输出No;思路:只要A的所有质因子都包含在B中,S就能赢(证明没看懂!!求指教)这里注意:(N表示A,B的极限值)1:一个数i的质因子,至多只会存在一个大于sqrt(i)的。所以这里我们只要枚举出小于sqrt(N)的所有质数即可,然后用所有小于sqrt(j)的质数来查找j的质因子,同时j也要做相应的除法把枚举道德质因子除去,当枚举完所有小于sqrt(j)质数时,j如果> 阅读全文
posted @ 2012-08-01 21:51 E_star 阅读(289) 评论(0) 推荐(0) 编辑
摘要: Levenshtein Distance (LD, 来文史特距离)也叫edit distance(编辑距离),它用来表示2个字符串的相似度,LD定义为需要最少多少步基本操作才能让2个字符串相等,基本操作包含3个:插入, 删除, 替换;比如,kiteen和sitting之间的距离可以这么计算:1,kitten -- > sitten, 替换k为s;2,sitten -- > sittin, 替换e为i;3,sittin -- > sitting, 增加g;所以,其LD为3。设计状态d[m][n] = d(A[1..m], B[1..n]),易知:d[0][0] = 0;d[i] 阅读全文
posted @ 2012-08-01 15:29 E_star 阅读(272) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=2492题意:专家研究一种病毒,发现他们只与异性发生性关系。问题:查看他们是否具有同性恋关系,给出n个病毒编号从1-n,给出q中关系,每种关系x,y表示x与y有性行为,即表示他们属于异性,输出这群病毒是否具有异性关系。思路:并查集的基本作用是用来区分不同的集合关系,相同的加入同一集合,不同的则不处理。这里给出x,y的不同关系,让你判断是否是相同集合,这里我们只要把相同的合并即可,另开一个数组记录与x不同的集合的代表(只要一个点即可代表整个与x不同的集合),只要遇到x,y不同我们就把x与opt[y] y与opt[x]合并即可,这样属于同一集合的 阅读全文
posted @ 2012-07-31 10:10 E_star 阅读(187) 评论(0) 推荐(0) 编辑
摘要: pku 3264http://poj.org/problem?id=3264题意:给定n个奶牛的高度,求区间[s,e]中最高与最低高度的差值。rmq模板题目:求出最高最低然后求差。注意这里f[i][j]表示从j开始的2^i次方个数的最值。View Code #include <cstdio>#include <cstring>#include <iostream>#include <cmath>#define maxn 50007#define N 22using namespace std;int fMin[N][maxn],fMax[N][m 阅读全文
posted @ 2012-07-30 17:33 E_star 阅读(469) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/summerschool/1_interval_tree.pdfhttp://www.baidu.com/s?wd=%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&inputT=6570 阅读全文
posted @ 2012-07-30 15:08 E_star 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 首先要分清a[] c[] sum[] 他们各自所代表的意思;a[]就是输入的数组;c[]就是建立的树状数组;c[i] = a[i - 2^k +1] + ...... + a[i];a有多少个c就有多少个,而且c[i]肯定包含相应的a[i];lowbit(i) = 2^k 表示i的二进制数表示形式留下左右边的1其余为取0得到的数sum[k] = c[N1] + c[N2] + c[N3].......+ c[Nm];Ni-1 = Ni - lowbit(i);求和的话,就是有c[Nm] c[Nm-1] c[Nm-2] .... c[N1]的过程 Ni - lowbit(i)的过程是将Ni的二进 阅读全文
posted @ 2012-07-30 15:07 E_star 阅读(235) 评论(0) 推荐(0) 编辑
摘要: pku 3321Apple Treehttp://poj.org/problem?id=3321题意:苹果树上有n个分叉,每个插上长着一个苹果,给出每个叉的关系,然后给出两种操作1:C x改变分叉x的苹果(如果有就拿走,如果没有就长出一个) Q x询问包括树叉x在内以及其子树的苹果数量;思路:才开始就在如何将树结构转化成线性数组结构然后用树状数组求解上难住了,最后看了一下解题报告,原来是首先边表(或邻接表)存树,然后dfs对每个节点重新编号每个节点对应着s,e两个编号。s是首先进入该点时的编号也即它本身的新标号(对应了线性数组的编号),e是搜索完子树后返回根节点的编号也即根节点本身所包含的子树 阅读全文
posted @ 2012-07-30 14:46 E_star 阅读(342) 评论(0) 推荐(0) 编辑
摘要: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4777本来想的算法是如果V<=100000就直接进行01背包时间复杂度为O(30*100000),如果大于100000大于部分贪心选择,剩余部分在进行01背包,可是中间会出现很多问题,大于部分的的处理不好弄,如果100000加上处理后的剩余部分会出现数组越界,再说有的数据也不会过,这只是一种yy的方法,不对。后来据说是爆搜解决01背包想了想时间复杂度能够达到(10^9自己不敢写,竟没有想到剪枝弄好了能够过,于是就写了起来,这里首先从大到小排序,这样大的在前边保证先装大的 阅读全文
posted @ 2012-07-30 10:50 E_star 阅读(248) 评论(0) 推荐(0) 编辑
摘要: :今天用骗数据的方法做了多校2的1002 1003感觉很爽,跟rh讨论这个题目时,他给我说了一个做这种大数据的经验YM。http://acm.hdu.edu.cn/showproblem.php?pid=4311http://acm.hdu.edu.cn/showproblem.php?pid=4312(这里给出很多点的操作)像这种O(n^2)可以解决的问题,但是数据量太大会tle的,我们可以选择小数据用O(m*n)来做,大数据则是枚举左右K个数,k取决于不超时的前提下的最大值了。(值越大对的可能性就越大)。ps:出题人出卡题的数据大多数会手写,手写的话也只是小数据量,O(m*n)大多数情况下 阅读全文
posted @ 2012-07-27 17:23 E_star 阅读(338) 评论(2) 推荐(0) 编辑
摘要: 话说这次比赛做的叫一个纠结啊,各种粗心的错误,输入数据搞倒了,数组开的大小搞倒了,纠结死了。哎...粗心啊!!!wa致死才检查出这种粗心的错误。。hdu4301 http://acm.hdu.edu.cn/showproblem.php?pid=4310题意:官方是状态压缩dp,我按比率排了个序贪心的选择,险过。View Code #include <iostream>#include <cstdio>#include <algorithm>#define maxn 22using namespace std;struct node{ int d,h; do 阅读全文
posted @ 2012-07-26 23:06 E_star 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 这类题目会询问区间中满足条件的连续最长区间,所以PushUp的时候需要对左右儿子的区间进行合并(这里最难理解)hdu 3308http://acm.hdu.edu.cn/showproblem.php?pid=3308题意:给定n个数,下标从0-n-1,给出两种操作Q x,y询问区间[x,y]中的最长上升子序列(LCIS), U x,y 将下表为x的值替换成y(单点更新)。输出每次询问的值。思路:U操作的单点更新就不必多说了,这里关键理解的是区间的合并;节点信息:struct node{ int l,r;//记录该节点的左右边界 int lm,rm,sm;//分别对应该点包括最左点... 阅读全文
posted @ 2012-07-26 10:03 E_star 阅读(475) 评论(0) 推荐(0) 编辑
上一页 1 ··· 23 24 25 26 27 28 29 30 31 ··· 38 下一页