Beauty of Programming
徽州风韵
这个作者很懒,什么都没留下…
展开
-
编程之美—24点游戏
问题:给4张牌,每张的面值在1—13之间,允许其中数值相同的牌。采用加、减、乘、除四则运算,允许中间运算存在小数,并且可以使用括号,但每张牌只能使用一次,尝试构造一个多项式,使其运算结果为24。 本文主要讲如何使用动态规划实现,给定4个数:A={a0,a1,a2,a3}。采用4位二进制表示集合,当且仅当ai在某一个子集中时,该子集所代表的二进制数对应的第i位为1,否则为0,比如A1={a1,a原创 2013-06-11 20:12:50 · 892 阅读 · 0 评论 -
编程之美-找符合条件的整数
问题:任意给定一个正整数N,求一个最小的正整数M,使得N*M的十进制表示形式中只含有1和0, 先证明这样的M是存在的。 下面给出如何求解这样的M呢?代码中主要由find()函数实现的,假若N=3,给出求解过程: 其思想就是在中找出N个最小的相等的数,然后它们的和就满足M*N的要求。 其求解是:由底向上求解,number:保存数,mod保存余数。 (1)先将1放入num原创 2013-06-16 15:41:41 · 868 阅读 · 0 评论 -
编程之美—寻找最大的k个数
问题:给出N个无序的数,选出其中最大的K个数。最简单的是将N个数进行排序,然后选出其中最大的K个数,但这种方法缺点是假如对上亿个数进行寻找K个最大的数,那么需要把上亿个数存入空间,然后排序,空间复杂度过大。 解决方法:采用堆序方法进行,思想:依次输入数,前K个数生成堆序,当输入K+1个数,将这个数与堆中的根结点进行比较,若比根节点大,则替换根结点,然后调用下滤函数percolatedown()调原创 2013-06-16 14:28:46 · 604 阅读 · 0 评论 -
编程之美-求数组的子数组之和最大值(该数组首尾相连)
问题:数组A[0],A[1],...,A[n-1]首尾相连,也就是允许找到一段数字(A[i],...,A[n-1],A[0],...A[j] )使其和最大。 求解思想:将其分成两类1.解没有跨越A[n-1]到A[0] 2.解跨过A[n-1]到A[0]。 接下来主要讲解第二中情况,编程之美书上的第二中求解是错误的。举个例子:100 1 2 3 -90 2 1,按照书上的解法:从原创 2013-06-16 16:14:08 · 652 阅读 · 0 评论 -
编程之美-两堆石头的游戏
问题:假设有两堆游戏,两个玩家根据以下规则轮流取石头:每个人每次可从两堆石头中各取数量相等的石头,或者仅从一堆石头中取出任意数量的石头。最后把剩下的石头依次拿光人获胜。两堆石头数量分别为n m。 思想:先产生i MIN.h #pragma once #include #include using namespace std; struct P { int x; int y;原创 2013-06-16 16:33:54 · 1002 阅读 · 1 评论