摘要: POJ2127 要求求最长公共上升子序列并输出方案。首先是n^3做法:f[i,j]表示a串匹配到第i位、b串匹配到第j位时的最长公共上升子序列。f[i,j]=f[i-1,j] or f[i-1,k]+1(a[i]与b[k]相同时)。然后考虑要优化到n^2,我们只需要每次在找f[i-1,k]时把复杂度转化为O(1)。我们用一个变量MAX记录i-1时到j为止最大的f[i-1,j],由于要求必须是上升序列,所以我们只当a[i]>b[j]时才去更新MAX。转移时用MAX+1去和f[i,j]比较即可。输出方案的话需要记录前驱数组pre,由于一维可能会导致错误的覆盖,所以应该用二维的pre数组。PO 阅读全文
posted @ 2012-08-17 08:01 Minty 阅读(184) 评论(0) 推荐(0)
摘要: Test 2012-8-12help 第一题70分算法很容易,想得满分的话在三角形的处理上比较麻烦,需要用到叉积。game 第二题用的线段树加贪心。一定程度上受到数据范围的影响,没有想到单调栈的O(N)算法。hamilton 第三题考场上只写了50分的DFS,标准算法为状压DP。(n<=20是状压的明显标志。)首先枚举起点,用f[t,m]表示当前找到的链的终点为t,各点出现的状态为m时,包括这条链的有多少个环。f[t,m]=Σf[i,m+1 shl (i-1)],或当i为起点且环的长度大于等于3时将f[t,m]加一。由于一个环可能被找多次,所以枚举下一个起点时将前面的起点删掉即可。即使这 阅读全文
posted @ 2012-08-13 06:42 Minty 阅读(165) 评论(0) 推荐(0)
摘要: POJ2480 题目要求计算Σgcd(i,n)。 需要用到的定义: [积性函数] 在非数论的领域,积性函数指所有对于任何a,b都有性质f(ab)=f(a)f(b)的函数。 在数论中的积性函数:对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数。若对于某积性函数 f(n) ,就算a, b不互质,也有f(ab)=f(a)f(b),则称它为完全积性的。 常见的积性函数:φ(n)、gcd(i,n) [欧拉函数] 在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。 φ函数通式:φ(x)=x(1-1/p1)(1-1 阅读全文
posted @ 2012-08-12 17:03 Minty 阅读(183) 评论(0) 推荐(0)