
算法
文章平均质量分 67
喝可乐怕蛀牙
喜爱兰兰
展开
-
三个水杯问题
三个水杯时间限制:1000 ms | 内存限制:65535 KB难度:4描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。输入第一行一个整数N(0接下来每组测试数据有两行,第一行给出三个原创 2016-03-30 09:05:17 · 845 阅读 · 0 评论 -
广义表的创建
广义表是一种链式存储结构,广义表的表示方法有多种,在稍后的博文中我会依次给出各种广义表的算法代码实现。首先简单的描述一下广义表的数据结构,广义表一般分为列表结点和原子结点。广义表中可以包含另一个广义表,这就使用广义表具有递归性,在下面的广义表创建中,就利用递归的思想进行创建。对于广义表的表头表尾的理解:比如广义表:A = (a,(b,c),((d,e,f),g))原创 2016-04-22 18:56:09 · 5753 阅读 · 0 评论 -
递归回溯之八皇后问题
状态变化树是一颗满二叉树,树中每个叶子结点的状态都是求解过程中可能出现的状态(即问题的解)。然而很多问题用回溯和试探求解的时候,描述求解过程的状态不是一颗满二叉树。也就是说只有部分叶子结点的状态才是解的状态,这就要要求在回溯的过程中当试探出现的状态和解的状态出现矛盾的时候,就不再继续往下试探了。这类问题的求解过程可以看作在约束条件下进行先根遍历,并在遍历过程中修剪掉那些不满足条件的分支。八皇后原创 2016-05-03 15:00:02 · 497 阅读 · 0 评论 -
回溯求幂集算法
幂集的每个元素是一个集合或者是一个空集。拿集合{A, B, C}来举例,这个集合的幂集为{ {A, B, C}, {A , B}, {A , C}, {B, C},{A}, {B}, {C}, {}}。可以看出分为3中状态:空集是集合中的一个元素组成的集合是集合中的任意两个元素组成的集合是集合中的三个元素组成的集合,就是它本身下面用回溯递归的思想来实现求幂集的算法:算法思想,集合中原创 2016-05-03 14:02:45 · 2289 阅读 · 0 评论 -
图的邻接矩阵表示方法以及遍历
下面的程序可以用来创建有向图,有向网,无向图,无向网。对于图来说如果来个顶点之间存在边,则在矩阵中用1表示,无边则用0表示。在网络中,边是对应权值的。图的遍历可以分为深度优先遍历和广度优先遍历。深度优先遍历的思想是,选择某个未被访问的顶点并访问,然后从该顶点出发,选择第一个和该顶点邻接的未被访问的顶点进行访问。在该过程中可以设置一个标识数组flags[]来标识各个顶点是否被访问到。广度原创 2016-05-10 20:25:47 · 2843 阅读 · 0 评论 -
爬楼梯问题(动态规划)
题目:一个人每次只能走一层楼梯或者两层楼梯,问走到第80层楼梯一共有多少种方法。解题思想:设走第i层楼梯需要dp[i]中方法,走第i-1层楼梯需要dp[i-1]中方法。则走第i+1层楼梯的方法种数为dp[i-1]+dp[i]种。实动态规划解题的主要思想就是找出递推式,然后利用子问题的解来求最后的最优解。下面是走楼梯题目的源代码:#include原创 2016-04-09 17:08:27 · 13690 阅读 · 2 评论 -
最多苹果数量(动态规划)
平面上有N*M个格子,每个格子中放着一定数量的苹果。你从左上角的格子开始,每一步只能向下走或是向右走,每次走到一个格子上就把格子里的苹果收集起来,这样下去,你最多能收集到多少个苹果。解这个问题与解其它的DP问题几乎没有什么两样。第一步找到问题的“状态”,第二步找到“状态转移方程”,然后基本上问题就解决了。首先,我们要找到这个问题中的“状态”是什么?我们必须注意到的一点是,到达一个格子的方式原创 2016-04-09 15:19:00 · 3122 阅读 · 1 评论 -
CSP最大的矩形
试题编号:3试题名称:最大的矩形时间限制:1.0s内存限制:256.0MB问题描述:问题描述在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。请找出能放在给定直方图里面积原创 2016-04-09 12:59:38 · 798 阅读 · 0 评论 -
CSP 最优配餐
问题描述 栋栋最近开了一家餐饮连锁店,提供外卖服务。随着连锁店越来越多,怎么合理的给客户送餐成为了一个急需解决的问题。 栋栋的连锁店所在的区域可以看成是一个n×n的方格图(如下图所示),方格的格点上的位置上可能包含栋栋的分店(绿色标注)或者客户(蓝色标注),有一些格点是不能经过的(红色标注)。 方格图中的线表示可以行走的道路,相邻两个格点的距离为1。栋栋要送餐必须走可以行走的道路原创 2016-04-09 11:21:44 · 1231 阅读 · 1 评论 -
ACM最少步数
最少步数时间限制:3000 ms | 内存限制:65535 KB难度:4描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1,0,1,0,0,1 1,原创 2016-04-03 23:38:00 · 793 阅读 · 0 评论 -
蛇形填数
描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:10 11 12 19 16 13 28 15 14 37 6 5 4输入直接输入方陈的维数,即n的值。(n输出输出结果是蛇形方陈。样例输入3样例输出7 8 16 9 25 4 3#include using namespace std原创 2016-04-02 00:31:41 · 346 阅读 · 0 评论 -
回文字符串
回文字符串时间限制:3000 ms | 内存限制:65535 KB难度:4描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。输入第一行给出整数N(0接下来原创 2016-03-30 18:14:02 · 434 阅读 · 0 评论 -
最长公共子序列
最长公共子序列时间限制:3000 ms | 内存限制:65535 KB难度:3描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列。tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符原创 2016-03-30 17:26:54 · 377 阅读 · 0 评论 -
大数阶乘
大数阶乘时间限制:3000 ms | 内存限制:65535 KB难度:3描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?输入输入一个整数m(0输出输出m的阶乘,并在输出结束之后输入一个换行符样例输入50样例输出30414093201713378043612608166064768844377641568960原创 2016-03-30 14:13:46 · 404 阅读 · 0 评论 -
括号配对问题
括号配对问题时间限制:3000 ms | 内存限制:65535 KB难度:3描述 现在,有一行括号序列,请你检查这行括号是否配对。输入第一行输入一个数N(0输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入3[(])(])([[]()])样例输出NoNoYes算法:利用原创 2016-03-30 12:48:34 · 384 阅读 · 0 评论 -
二叉树创建以及遍历方式
二叉树的几个重要性质: 性质1 : 在二叉树的第i层最多有2^i - 1个结点 性质2 : 深度为k的二叉树最多含有2^k - 1个结点 性质3 : 对于任何二叉树,如果叶子结点个数为N0,度数为2的结点个数为N2,则由下列等式: N0 = N2+1 性质4 : 具有n个结点的完全二叉树的深度为log原创 2016-04-22 20:02:50 · 379 阅读 · 0 评论