随笔分类 - 算法与数据结构
摘要:题目大意: 有两只青蛙A和B,住在同一纬线上。它们分别从坐标x和y出出发。青蛙A每次能跳跃m米,青蛙B每次能跳跃n米,A和B每次都在同一之间跳跃。设地球的纬线长度为L。 问A和B是否能够相遇(在同一时间到达同一坐标),如果能够相遇,那么需要跳跃多少次?解题思路: 利用欧几里得扩展式子。 我们这道题最后是要求x + k*m = y + k*n + pL。其中k、p为整数,需要确定。 将上面的等式进行简单的变换,可得 (x-y) = k(n-m) + pL 设a=n-m,b = L,c=x-y,则上面的等式变为: a*k + b*p = c 在介绍上面等式的解法之前,我们先介绍利...
阅读全文
摘要:题目大意:人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为23天、28天和33天每一个周期。中有一天是高峰。在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个周期的周长不同,所以通常三个周期的高峰不会落在同一天。对于每个人,我们想知道何时三个高峰落在同一天。对于每个周期,我们会给出从当前年份的第一天开始,到出现高峰的天数(不一定是第一次高峰出现的时间)。你的任务是给定一个从当年第一天开始数的天数,输出从给定时间开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个高峰同天
阅读全文
摘要:http://poj.grids.cn/practice/1018描述We have received an order from Pizoor Communications Inc. for a special communication system. The system consists of several devices. For each device, we are free to choose from several manufacturers. Same devices from two manufacturers differ in their maximum band
阅读全文
摘要:DescriptionMichael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长...
阅读全文
摘要:一、动态规划的三要素:阶段,状态,决策如果把动态规划的求解过程看成一个工厂的生产线,阶段就是生产某个商品的不同的环节,状态就是工件当前的形态,决策就是对工件的操作。显然不同阶段是对产品的一个前面各个状态的小结,有一个个的小结构成了最终的整个生产线。每个状态间又有关联(下一个状态是由上一个状态做了某个决策后产生的)。下面举个例子:要生产一批雪糕,在这个过程中要分好多环节:购买牛奶,对牛奶提纯处理,放入工厂加工,加工后的商品要包装,包装后就去销售……,这样没个环节就可以看做是一个阶段;产品在不同的时候有不同的状态,刚开始时只是白白的牛奶,进入生产后做成了各种造型,从冷冻库拿出来后就变成雪糕(由液态
阅读全文
摘要:问题描述:给定两个序列X=<x1, x2,x3,…,xm> 和 Y=<y1, y2, y3,…, yn>, 求X与Y的一个最长公共子序列问题分析:这个题目的阶段不是明显,没有很明显的上一步、上一层之类的。既然涉及到公共子序列,也就是有X的第 i 个字符和Y的第 j 个字符相等的情况。显然如果X[i] = Y[j] 那么长度分别为 i 和 j 的最长公共子序列就是长度分别为 i-1 和 j-1的最长公共子序列 加上 X[i] 或 Y[j]。如果X[i] != Y[j] 呢?如果不相等,那么长度为 i 和长度为 j 的序列的最长公共子序列就是“长度为i-1 和 j ” 和“
阅读全文
摘要:问题描述:考虑下面的数字金字塔,写一个程序来计算从最高点开始,在底部任意处结束经过的数字和最大,每一步可以走到左下和右下的点。 73 8 8 1 0 2 7 4 44 5 2 6 5变形后:73 88 1 02 7 4 44 5 2 6 5问题分析:可以先对金字塔进行变形,如上。对于数字金字塔可以用(i, j)来表示数字在金字塔中的位置。对于金字塔中间的一点,想要经过它,则必须经过它的左上或上面的点(变形后)。因此要使经过该点的和最大,则是在经过左上和右上的点中较大的“最大和”,然后加上该点的值。这样,状态很明显是金字塔的层。设计一个二维状态opt[i, j]表示到第 i 行 第 j 列的最大
阅读全文
摘要:问题描述:在一个无序的序列a1,a2,.....,am里,找到一个最长的序列,满足ai<=aj...<=ak; 且i<j<k;问题分析:如果前i-1个数中的最长非降子序列的最后一个数是ak;那么下一步就是在求前k-1个数中的的最长非降子序列;因此我们可以设计一个状态opt[j]表示前i个数中用到a[i]所构成的最优解。那么决策就是在前i-1个数中找到最大的opt[j] 使得a[j]<=a[i],那么opt[j]+1 就是opt[i]的值;方程可以这样表示: max[opt[j]] a[i] < a[j] && 0<=j<iopt[
阅读全文
摘要:归并排序算法是几种排序算法里面时间性能较好的了为O(nlogn)归并排序时分治法的一个典型应用,它先将要排序的序列分成两分,分别对每一份用归并排序尽心排序,然后在将两份合并在一起,形成一个有序 的序序列。codeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 #include <iostream> 2 usingnamespace std; 3 4#define MAX 10 5#define INFINITE 0xFFFF
阅读全文

浙公网安备 33010602011771号