编程之美
victor886
XQ says, it is time for fighting!
展开
-
24点游戏(Naive solutions)
24点游戏大家都很熟悉,具体题目可以参考编程之美1.16(P100)。根据书上的描述,给玩家4张牌,每张牌的面值在1~13之间,允许其中有数值相同的牌。采用加、减、乘、除四则运算,允许中间运算存在小数,并且可以使用括号,但每张牌只能使用一次,尝试构造一个表达式,使其运算结果为24。 输入:n1 n2 n3 n4 输出:若能得到运算结果为24,则输出一个对应的运算表达式。 对于这个问题原创 2012-08-06 00:44:13 · 739 阅读 · 0 评论 -
24点游戏(A better solution)
接上一篇文章,这篇文章将介绍24点游戏的一种改进的编程方法,将减少枚举过程的冗余。思路是编程之美上的解法二,思想是集合和动态规划(set & DP),利用了子集的结果求出更大集合的解,最后求出整个集合上面的的所有表达式,再进行筛选。书上的文字解释写的不太清楚,需要结合伪代码看,所以在此就把书上的伪代码拷贝过来,再附上自己具体实现的C++代码,欢迎大家指正! 伪代码如下: 24Game(Arra原创 2012-08-06 00:58:12 · 708 阅读 · 0 评论 -
子数组之和的最大值
求子数组之和的最大值问题是一个比较常见面试题,具体看见编程之美P184,题号为 2.14。 看编程之美上的解答有时候反而不利于理解,上面列出三种解法,时间复杂度分别是O(n^3),O(n^2)以及O(n)。 其实线性时间复杂度(O(n))的解法思路比较直观,主要思想是动态规划(DP),即求出以a[i]结尾的子串之和的最大值,再求n个这样的最大的值的最大值。 求出以a[i]结尾的子串之和原创 2012-07-29 20:00:45 · 749 阅读 · 2 评论 -
数组最长递增子序列(Longest Increasing Sequence)
数组最长递增子序列(Longest Increasing Sequence)(下称LIS)是个比较常见的题目,算法导论和编程之美上都可以找到。 网上也同样可以找到很多解答和思路,今天自己写了一遍,整理下思路,代码比较简洁,相信比较好理解。 求LIS的思路是动态规划(DP),但是不同的DP思路有着不同的时间复杂度,常见版本时间复杂度为O(n^2),优化的版本为O(n*logn)。 优化版原创 2012-07-29 01:36:04 · 870 阅读 · 2 评论