摘要: Longest Common Sequence两个串,求最大公共子序的长度,这是一个经典的问题。 动态规划的解法是:f(i,j)=max(f(i-1,j),f(i,j-1), f(i-1,j-1)+(a[i]==b[j]?));2012 gcj Round 1C的第三题Box Factory就是一个LCS问题的变形。http://code.google.com/codejam/contest/1781488/dashboard#s=p2不同的是这里f(i-1,j-1)这一项比较复杂。需要i,j一直向0搜索,然后得到一个最大值。for (int i = 1; i <= n; ++i) { 阅读全文
posted @ 2012-08-22 10:20 xxx's blog 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 3+2*34+5*(6-7)3*(2*(5-3)+1)/2+8-9*(8-1)算数表达式,比如: a*(b+c)/d+e如果求值?一般的过程是分两步,一、将中缀式-》后缀式。算法过程是:栈底放‘#’,从左至右逐字读取中缀式: a.当当前字符为数字时,直接输出; b.当当前字符为"("时,将其压栈; c.当当前字符为")"时,则弹出堆栈中最上的"("之前的所有运算符并输出,然后删除堆栈中的"(" ; d.当当前字符为运算符时,则依次弹出堆栈中优先级大于等于当前运算符的,输出,再将当前运算符压栈; e.当为" 阅读全文
posted @ 2012-08-19 15:34 xxx's blog 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 第二题推出数学公式后发现太坑爹了。。oblem StatementA Ball Triangle is a set of identical balls placed in a triangular shape. A Ball Triangle has N rows, numbered 1 to N from top to bottom. For all i, 1 <= i <= N, the i-th row contains i balls. For example, the following image shows a Ball Triangle with N=3. ... 阅读全文
posted @ 2012-08-17 11:55 xxx's blog 阅读(397) 评论(1) 推荐(0) 编辑
摘要: 子集和是一个很著名的问题,一个集合S{s1,s2,s3,s3,...,sn}, 给一个数s,问是否存在一个S的一个或多个子集,使得该子集内所有元素的和等于给出的数.显然利用一个辅助的数字x[],可以在O(2^n)时间复杂度内完成搜索出所有的解.当如果要问存在多少个子集能够组成目标数字. 我们可以利用动态规划的方法来得到答案, 这样时间和空间复杂度是O(s*n), s是目标数字, n是备选集合的元素个数.动态方程是: f(i, j) =f(i-1, j) + f(i-1, j-S[i-1]) + (j==S[i]). 其中i从1到n, j从1到s.最终结果f(n,s)就是可以组成s的子集个数.- 阅读全文
posted @ 2012-08-02 11:35 xxx's blog 阅读(305) 评论(0) 推荐(0) 编辑
摘要: 组合算法本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标代表的数被选中,为0则没选中。首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。然后从左到右扫描数组元素值的“10”组合,找到第一个“10”组合后将其变为“01”组合,同时将其左边的所有“1”全部移动到数组的最左端。当第一个“1”移动到数组的m-n的位置,即n个“1”全部移动到最右端时,就得到了最后一个组合。abcde例如求5中选3的组合:1 1 1 0 0 //1,2,3 abc1 1 0 1 0 //1,2,4 abd1 0 1 1 0 //1,3,4 acd0 1 1 1 0 //2,3,4 bc 阅读全文
posted @ 2012-07-28 18:07 xxx's blog 阅读(649) 评论(3) 推荐(0) 编辑
摘要: Socket编程中一个很奇怪的现象:用DataInputStream对象没错,但改为ObjectInputStream就出错了,而且try...catch还抓不到异常。……Socket编程中一个很奇怪的现象:用DataInputStream对象没错,但改为ObjectInputStream就出错了,而且try...catch还抓不到异常。例如在Socket客户端中,使用DataInputStream进行下述编程,很正常,不会出现问题:view plaincopyDataInputStreamdataIn=newDataInputStream(socket.getInputStream);Dat 阅读全文
posted @ 2012-07-22 15:04 xxx's blog 阅读(1828) 评论(1) 推荐(1) 编辑
摘要: Java Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。在很多操作中,比如建立目录 数据库连接都需要这样的单线程操作。还有, singleton能够被状态化; 这样,多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,每次浏览一次需要计数,单态类能否保持住这个计数,并且能synchronize的安全自动加1,如果你要把这个数字永久保存到数据库,你可以在不修改单态接口的情况下方便的做到。另外方面,Singleton也能够被无状态化。提供工具性质的功能,Java Singleton模式就为我们提供了这样实现的可能。使用 阅读全文
posted @ 2012-07-19 21:26 xxx's blog 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 打印出一个字符串的全排列,有很多方法,最容易看到的是递归的方法。void range(char a[], int k){if(k==a.length-1){System.out.println(Arrays.toString(a));}else {for(int i=k;i<a.length;i++){swap(a[i],a[k]);range(a,k+1);swap(a[k],a[i]);}}还可以借助栈来把上面的改成非递归。当然还有其他的方法,比如1、字典序方法。写的时候借助一个Num[]辅助数组。void printRange(char a[]){for(int i=0;i< 阅读全文
posted @ 2012-07-19 21:17 xxx's blog 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 利用2进制的想法。一个集合比如{a,b,c}对应二进制表示0 { }1 {c}010 {b}011 {b,c}100 {a}101 {a,c}110 {a,b}111 {a,b,c}-public void printAllSubSet(int []a){ int n=a.length; int i=0; n=(int)Math.pow(2, n); for(i=1;i<n;i++){ String s=Integer.toBinaryString(i); //System.out.println(s); int k=s.length()-1; for(int j=a.... 阅读全文
posted @ 2012-07-15 18:56 xxx's blog 阅读(394) 评论(0) 推荐(0) 编辑
摘要: 1、Problem StatementYou are given a int length. We have a regular hexagon: a polygon with six sides, in which all internal angles have 120 degrees and length is the length of each side. We are going to draw three non-intersecting diagonals in some way. These will divide the hexagon into four triangle 阅读全文
posted @ 2012-07-14 14:09 xxx's blog 阅读(337) 评论(0) 推荐(0) 编辑