基础算法
文章平均质量分 68
蓝色如烟
这个作者很懒,什么都没留下…
展开
-
高精度乘法
原 题: 输入两个正整数,求它们的积。算法分析: 类似加法,可以用竖式求乘法,在做乘法运算时,同样也有进位,同时对每一位进行乘法运算时, 必须进行错位相加。代 码: #include#include#includeusing namespace std;int bc[256],c[256],原创 2017-04-12 15:40:07 · 208 阅读 · 0 评论 -
最大子矩阵详解(转载五星推荐)
转载自:http://blog.csdn.net/beiyeqingteng/article/details/7056687前言:今天花了很长时间,看了无数人写的帖子,但是几乎没有人把这个问题一下子说得很清楚,所以,我把这个问题按照自己的思路写出来,希望能够把这个问题讲清楚。问题:求一个M*N的矩阵的最大子矩阵和。比如在如下这个矩阵中:0 -2 -7 0转载 2017-11-06 19:29:28 · 1093 阅读 · 0 评论 -
分冶算法--循环赛
一、算法分析将一个规模为N的问题,分解为K个规模较小的子问题,这些子问题,相互独立且与原问题性质相同,只需要求出子问题的解就可以得到原问题的解!分冶算法的一般步骤如下:·分解,将要解决的问题,划分成若干个规模较小的同类问题。·求解,当子问题分的足够的小的时候,用简单的办法解决!·合并,按原来问题的要求,将子问题的解合并构成新问题的解!转载 2017-10-21 17:03:45 · 343 阅读 · 0 评论 -
动态规划--护卫队
一、问题描述 护卫车队在一条单行的街道前排成一队,前面河上是一座单行的桥。因为街道是一条单行道,所以任何车辆都不能超车。桥能承受一个给定的最大承载量。为了控制桥上的交通,桥两边各站一个指挥员。护卫车队被分成几个组,每组中的车辆都能同时通过该桥。当一组车队达到了桥的另一端,该端的指挥员就用电话通知另一端的指挥员,这样下一组车队才能开始通过该桥。每辆车的重量是已知的。任何一组车转载 2017-10-29 20:12:46 · 711 阅读 · 0 评论 -
动态规划---挖地雷
一、问题描述在一个地图上有n个地窖(n径都是单向的,且保证都是小序号地窖指向在序号地窖,也不存在可以从一个地窖出发经过若干地窖后又回到原来地窖的路径。某人可以从任一处开始挖地雷,然后沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使他能挖到最多的地雷。【输入】转载 2017-10-30 13:54:49 · 4615 阅读 · 0 评论 -
分冶之归并排序
一、算法分析 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 (一)分而治之 可以看到这种结构很像一棵完全二原创 2017-10-22 19:17:04 · 241 阅读 · 0 评论 -
贪心--金银岛
一、算法分析 典型的贪心算法,思路是:计算每个金属的性价比,然后根据性价比进行排序,从高到低尽可能塞入背包,背包满则得到最大值。二、参考代码#include "iostream" #include "iomanip" #include "algorithm" using namespace std; struct metal原创 2017-10-22 20:30:46 · 1536 阅读 · 0 评论 -
算法之贪心书架
一、算法分析 分析:这是一道贪心题,其实贪心的条件很明显:显然,塔中的奶牛数目越多,整座塔就越不稳定,于是奶牛们希望在能够到书架顶的前提下,让塔中奶牛的数目尽量少。 那么我们就可以得到一个贪心条件:每次都选取当前奶牛序列中选取一个最高的奶牛,在“奶牛塔”上叠上这个奶牛,然后将这个奶牛删除,这样我们可以保证这样的结果是最优的。我是使用STL sort来实现每次选取最优值的。 看转载 2017-10-22 20:38:29 · 998 阅读 · 0 评论 -
分冶--区间合并
一、算法分析区间合并 总时间限制: 1000ms 内存限制: 65536kB 描述 给定 n 个闭区间 [ai; bi],其中i=1,2,…,n。任意两个相邻或相交的闭区间可以合并为一个闭区间。例如,[1;2] 和 [2;3] 可以合并为 [1;3],[1;3] 和 [2;4] 可以合并为 [1;4],但是[1;2] 和 [3;4] 不可以合并。我们的任务是判断这些区间转载 2017-10-23 15:20:10 · 573 阅读 · 0 评论 -
图论之拓扑排序基础
一、拓扑排序原理 先看拓扑排序是为解决什么问题而出现的: 在我们生活中,我们可以用活动网络来描述生产计划、施工过程、生产流程、程序流程等工程的安排问题。小到家里做饭,大到神九上天,都可以用活动网络来表示。而活动网络呢,有两种:AOV(Activity on Vertices)网络和AOE(Activity on Edges)网络。两种活动网络,一种用点来原创 2017-11-05 14:16:09 · 398 阅读 · 0 评论 -
穷举法---完全数
问题描述: 找出1000以内的所有“完全数”,所谓“完全数”是指一个数恰好等于它的因子和,例如 6=1+2+3,我们就称6是完数。参考代码: #includeusing namespace std;int main(){int i,j,m,sum=0;for(m=2;m1000;m++) { for(i=1;im/2;i++) if(m%i=原创 2017-11-27 10:45:24 · 609 阅读 · 0 评论 -
穷举法--三角形的个数
问题描述: 输入绳子的长度n,将该绳子分成三段,每段的长度为正整数,输出由该三段绳子组成的三角形的个数;参考代码:#includeusing namespace std;int main(){ int a,b,c,n,s; cin>>n; s=0; for (a=1;an-2;a++) for(b=a;bn-2;b++)原创 2017-11-27 14:17:35 · 3333 阅读 · 0 评论 -
动态规划--最大子矩阵和
一、原理分析1. 简述 给定一个n*n(0 Example: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 最大子矩阵为: 9 2 -4 1 -1 82. 原理 最大子矩阵和是最大子序列和的二维扩展。转载 2017-11-06 19:20:35 · 1734 阅读 · 0 评论 -
深搜--全排列
[题 目]输入一个数n,输出1~n的全排列。 举例:假如有编号为1 2 3的3张扑克牌和编号为1 2 3 的3个盒子里,并且每个盒子有且只能放一张扑克牌。那么一共有多少种不同的放法呢[分 析]当小哼走到第四个盒子的时候,已经完成一种排列。产生一种排列之后小哼需要立即返回。小哼需要退一步重新回到3号盒子前面,取回放在3号盒子的扑克牌,再往3号盒子放牌时已没有别的选择,于是再回原创 2017-06-28 14:40:54 · 853 阅读 · 0 评论 -
穷举法--火柴棍等式问题
题目:描述给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:注意:1. 加号与等号各自需要两根火柴棍2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C≥0)3. n根火柴棍必须全部用上分析: 要找出形A+B=C原创 2017-06-28 10:04:22 · 802 阅读 · 0 评论 -
高精度除以低精精度数
原 题: 高精除以低精。输入两个正整数,求它们的商(做整除)算法分析: 采用按位相除法代 码: #include#include#includeusing namespace std;int a[100],c[100];int main(){char bcs[100]; int b,lena,lenc,x,i; gets(bc原创 2017-04-12 16:22:42 · 2710 阅读 · 0 评论 -
插入排序详解
算法分析 插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。 插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行。 图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入。 代 码:#include转载 2017-04-18 13:16:46 · 196 阅读 · 0 评论 -
高精度除以高精度
原 题: 高精除以高精,求它们的商和余数。算法分析: 高精除以高精是用减法模拟除法,对被除数的每一位都减去除数,一直减到当前位置的数字(包括前面的余数)小于除数(由于每一位的数字小于10,所以对于每一位最多进行10次计算)代 码:原创 2017-04-14 14:31:03 · 3302 阅读 · 0 评论 -
高精度加法
原 题: 输入两个正整数,求它们的和。算法分析: 竖式方法,分别用一个数组存储补加数,一个数组存储加数,一个数组存储结果。代 码: #include#include#includeusing namespace std;int a[301],b[301],c[301];int main(){string s,js;int lena,len原创 2017-04-14 14:34:50 · 247 阅读 · 0 评论 -
快速排序详解
[算法分析] 快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 一趟快速排序的具体做法是:附设两个指针i和j,它们的初值分别为l和r ,设枢轴记录取mid,则首先从j所指位置起向前搜索找到第一个关键字小于mid的记录,然后从i所原创 2017-04-19 12:35:21 · 341 阅读 · 0 评论 -
基础递归
例题:给定n(n>=1),用递归的方法计算1+2+3+4+...... +(n-1)+n.[算法分析] 本题可以用递归方法求解,其原因在于它符合递归的三个条件:(1)本题是累加问题:当前和=前一次和+当前项,而前一次和的计算方法与其相同,只是数据不同s(n)=s(n-1)+n;(2)给定n,所以是有限次的递归调用;(3)结束条件是当n=1时,则s=1;[参考程序]原创 2017-05-25 08:39:33 · 240 阅读 · 0 评论 -
归并排序详解
[算法定义] 将两个或两个以上有序的数列(或有序表),合并成一个仍然有序的数列(有序表),这种操作称为归并操作。若将两个有序表合并成一个有序表,称为二路归并。二路规并相对简单,所以重点讨论二路归并。[算法分析] 归并排序时的时间复杂度为O(nlgn) 其主要思想是分治法(divide and conquer),分就是要将n个元素的序列划分为原创 2017-04-19 12:41:41 · 218 阅读 · 0 评论 -
高精度除法分析及代码
算法分析 高精度除法, 这个和加减乘一样,我们都要从手算的角度入手。举一个例子,比如 524134 除以 123。结果是4261 第一位4的来源是 我们把 524和123对齐,然后进行循环减法,循环了4次,余32,将32134的前三位321继续和123对齐,循环减法2次,余75,把7534的前三位753和123对齐,循环减法6次,余15,将154和123对齐,只能减1次,所以结转载 2017-04-13 16:30:38 · 3721 阅读 · 1 评论 -
递归之二分算法
[例 题]: 设有n个数已经按从大到小的顺序排列,现在输入x,判断它是否在这n个数中, 如果存在则输出“YES”,否则输出"NO"。[算法分析]: 该问题属于数据的查找问题,数据查找有多种方法,通常方法是:顺序查找和二分查找,当N个数排好序时,用二分查找速度大大加快。二分查找算法: (1)设有n个数,存放在a数组中,待查找数为x,用L指向数据的高原创 2017-05-25 15:59:46 · 1217 阅读 · 0 评论 -
递推算法应用--数塔问题
[原 题] 数塔问题。如下图1-1所示为一个数字三角形。请编一个程序计算从顶到底的某处的一条路径,使该路径所经过的数字总和最大。只要求输出总和。 1、一步可沿左斜线向下或右斜线向下走。 2、三角形行数小于等于100; 3、三角形中的数字为0,1,…99; 测试数所通过键盘逐行输入,如上例数据应以如下图1-2所示格式输入:原创 2017-04-25 12:41:59 · 982 阅读 · 0 评论 -
穷举法---孪生素数
问题描述: 在质数的大家庭中,大小之差不超过2的质数称为一对孪生素数,如2 和3,3和5、17和19等等。请你统计一下,在不大于自然数N的质数中,孪生素数的对数。参考代码: //数学上把相差为2的两个质数叫做“孪生质数” //在 100 以内的孪生素数有(3,5),(5, 7), (11, 13), (17, 19), //(29,原创 2017-11-27 15:01:00 · 2281 阅读 · 1 评论