瓷砖覆盖地板问题

4.2《瓷砖覆盖地板》的扩展问题改为正题,求N*M的地板用1*2的瓷砖铺有多少种铺法?

如果n*m 为奇数则 方案数为0,每块瓷砖都是1*2的,只会影响上下两行,故可用状态压缩dp

一个6×9的面积铺法如下图:

可以看出,在按 行铺 的过程中,一些砖会被分成两半,如图2,但最多也是向下突出一格,在图3中,我们将图2的空隙填满,则又转移到了下一行状态。

如果我们把行进行动态规划,则第i行的各种情况即表示第i个阶段的的各种状态。

Continue reading

如何设计PPT

PPT是演讲的辅助,这一点是最基本的。它应该是线索,是关节,而不应该是具体的stuff。去看看那些善于演说的人,比如老罗、乔布斯,PPT清一色的简洁,真正吸引人的是从他们嘴里说出来的。所以不能一味去追求PPT的技巧而本末倒置。

但是,即使锦上添花,也是有门道和方法的。否则,像杨二戴一朵大红花,或是一不小心添了一朵白花,那就是锦上添乱了。

那么,怎样使自己的PPT吸引人、形神兼备呢?

神:
Continue reading

编程之美:3.1-字符串移位包含的问题 —— By 算法组 郑建潮

此题的思路:

将目的字符串数值化,并将原串从头到尾依次按照目的串的长度分离出一个子串并计算其数值化结果。若此结果与目的串的数值化结果相等,则进一步按位比较判断两个字符串是否完全一样,一样即可得到返回值,否则继续搜寻直至结尾(结尾前已经包含了原串循环的过程)。

数值化字符串方法如下:

给定字符串(字符数组)S = ”@#¥……%&” ,其长度为n。则S数值化结果为:

value = f(@) * 1 + f(#) * 2 + …… + f(%) * (n-1) + f(&) * n         f()为取字符的ASCⅡ值
Continue reading

求解最大公约数——By 算法组 郑建潮

典型的最大公约数求法有辗转相除法与更相减损术,本文则侧重于更相减损术。

要求两个数的最大公约数,当这两个有1000位之多时,我们必须用高精度运算,那此时我们该用什么算法求解呢?我所认为的好方法之一不是辗转相除法,而是中国古代人民智慧的更相减损术。

f(x , y) = f(x-y , y) = … 其中f(x , y)表示x与y的最大公约数。

此时用到的只有高精减法,那么也许你会问f(100000000000 , 1)是不是要减100000000000次才出结果呢?显然这种方法在时间上并没有优势,我要解释的是,更相减损术有改进的方法。例如求 f(3333333333 , 111),不是用 x – y,而是 x – y*10000000 = 2223333333,然后继续减 y * 10^k (k为x > y*10^k 时最大的k) , 直到不能减后交换,继续此步骤,直到减为0后,答案就出来了。恰巧因为a,b为高精数,在做 y * (10^k)时,不需要真正地做乘法,只需移位即可。
Continue reading