![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
linxuh
男
展开
-
关于最长递增子序列
这两天一直在看最长递增子序列,总是一知半解的。刚看到一篇好文章,一下子接了我的疑惑,很不错,分享一下。最长递增子序列问题原创 2013-08-20 18:19:27 · 416 阅读 · 0 评论 -
吝啬的国度(dfs)
描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。 输入 第一行输入一个整数M表示测试数据共有M(1 每组测试数据的第一行输入一个正整数N(1 随后的N-1行,每行有两个正整数a,b(1 输出 每组测试数据输N个正整数原创 2013-11-25 20:51:01 · 430 阅读 · 0 评论 -
一笔画问题
描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。 输入 第一行只有一个正整数N(N 每组测试数据的第一行有两个正整数P,Q(P 随后的Q行,每行有两个正整数A,B(0 输出 如果存在符合条件的连线,则输出"Yes", 如果不存在符合条件的连线,输出"No"原创 2013-11-25 21:40:19 · 574 阅读 · 0 评论 -
Kruskal 最小生成树
最近刚学了最小生成树的Kruskal算法,调试了好久,终于过了,比较浪费时间和空间,就是按照原本的思路写的,以后学着优化,把边排序。这次是用邻接矩阵实现的,以后试着用邻接表实现。#include #include #include int Map[501][501]; int Father[501]; bool Vis[501][501]; int find(int x)原创 2013-11-18 20:56:39 · 628 阅读 · 0 评论 -
NYOJ布线问题
描述南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1、把所有的楼都供上电。 2、所用电线花费最少 输入第一行是一个整数n表示有n组测试数据。(n 每组测试数据的第一行是两个整数v,e. v表示学校里楼的总个数(v 随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c 随后的1行里,有v个整数,其中原创 2013-11-11 21:37:56 · 484 阅读 · 0 评论 -
中缀到后缀的转换
我们平常所写的标准形式的表达式叫做中缀式,我们可以用栈来把他转换成后缀式。假设只允许操作+,*,(,),并坚持普通的优先级发则。还要假设表达式是合法的。 如将表达式 a + b * c + ( d * e + f ) * g转换成后缀式是a b c * + d e * f + g * + 思路 :当读到一个操作数时,立即把他放到输出中。而把操作符放进一个栈中。原创 2013-09-24 09:40:59 · 1240 阅读 · 0 评论 -
用异或交换两个整数的陷阱
前面我们谈到了,可用通过异或运算交换两个数,而不需要任何的中间变量。 如下面: void exchange(int &a, int &b) { a ^= b; b ^= a; a ^= b; } 然而,这里面却存在着一个非常隐蔽的陷阱。 通常我们在对数组进行操作的时候,会交换数组中的两个元素,如exchang(转载 2013-10-26 21:18:05 · 529 阅读 · 0 评论 -
城市平乱
描述 南将军统领着N个部队,这N个部队分别驻扎在N个不同的城市。 他在用这N个部队维护着M个城市的治安,这M个城市分别编号从1到M。 现在,小工军师告诉南将军,第K号城市发生了暴乱,南将军从各个部队都派遣了一个分队沿最近路去往暴乱城市平乱。 现在已知在任意两个城市之间的路行军所需的时间,你作为南将军麾下最厉害的程序员,请你编写一个程序来告诉南将军第一个分队到达叛乱城市所需的时间。 注意,原创 2013-11-26 19:09:21 · 725 阅读 · 0 评论 -
线段树
好久没做算法题了,今天做了一道,又是百度又是思考的,终于bata原创 2014-07-11 14:52:13 · 377 阅读 · 0 评论 -
邻接表实现 prim
思路很简单,就是每次选取不在生成树中的权值最小的边加入到生成树中。使用了两个结构体,一个链表,一个节点数组。#include #include #include #include #define MAX 100000000 using namespace std; struct link { int a; int value; link* next; }; struct node原创 2013-11-28 16:55:26 · 1233 阅读 · 0 评论 -
后缀表达式
假如我们有一个计算器并想要计算一趟外出购物的花费。为此,我们将一列数据相加并将最终结果乘以1.06(附加的地方税)。如果各项费用为4.99,5.99和6.99,那么输入这些数据的自然的方式是 4.99+5.99+6.99*1.06= 随着计算器的不同这个结果或是所要的答案的19.05,或是科学答案18.39。许多简单的计算器将给出第一个正确的答案,但是许多先进的计算器知道乘法的优先原创 2013-09-24 09:39:21 · 579 阅读 · 0 评论 -
NYOJ751破坏城市
描述 L 是一个坏蛋,他总是破坏遇见的一切事情。 一天,L到达一个新的城市,该城市有n个点,有m条线路来连接这n个点。L将破坏所有的线路。但是他想知道当他破坏前i条线路时该城市有多少个块组成。我们认为当两个点可以通过线路直接或间接相互到达时,这两点属于同一个块 输入多组数据。 每组数据第一行输入 n ,m。(点的编号从0开始)。 接下来m行,每行输入两个数u,v,代表这两点有一条线路相连原创 2013-11-01 20:46:00 · 449 阅读 · 0 评论 -
平衡符号
在编译器检查程序错误时,常常由于缺少一个符合引起编译器列出上百行的诊断,而真正的错误并没有找出。 如序列“[()]”是合法的,而“[(])”是错误的。 算法: 做一个空栈。读入字符直到文件尾,如果字符是一个开放符号,则将其推入栈中。如果字符是一个封闭符号,则当栈空是报错。否则将栈元素推出。如果弹出的符号不是对应的开放符号,则报错。在文件尾,如果栈非原创 2013-09-20 19:52:38 · 873 阅读 · 0 评论 -
表达式树
表达式树通过二叉树来表示一个表达式。它的树叶是操作数,比如常数或变量,而其他的节点是操作符。通过递归的计算左子树和右子树所得到的值应用在根处的运算符操作中而算出表达式的值。 可以通过递归产生一个带括号的左表达式,然后打印出在根处的运算符,最后再递归的产生一个带扩号的有表达式而得到一个中缀表达式。这种一般的方法(左,节点,右)称为中序遍历。 递归打印出左子树、右子树,然后原创 2013-09-25 09:37:28 · 757 阅读 · 0 评论 -
二叉堆
堆是一棵被完全填满的二叉树,有可能的例外是在底层。 因为完全二叉树很有规律,因此可以用数组来表示,而不需要用指针。对于数组中任一位置i上的元素,其左儿子在2i上,右儿子在左儿子后的单元中。它的父亲则在i/2中。因此,遍历该树所需要的操作也非常简单,唯一的问题是最大的堆大小需要事先估计。 因此,一个堆数据结构由一个数组(不论是什么类型)、一个代表最大值的整数以及当前堆的大小组成。原创 2013-10-11 20:45:59 · 533 阅读 · 0 评论 -
算法面试题
1.比较两个字符串如果不等返回True? 答案: Java代码 package com.test.kaoshi; public class StringDemo { private static String a = "abc"; private static Stri转载 2013-10-20 17:47:02 · 1111 阅读 · 0 评论 -
彻底弄懂二维树状数组
当要频繁的对数组元素进行修改,同时又要频繁的查询数组内任一区间元素之和的时候,可以考虑使用树状数组. 通常对一维数组最直接的算法可以在O(1)时间内完成一次修改,但是需要O(n)时间来进行一次查询.而树状数组的修改和查询均可在O(log(n))的时间内完成. 一、回顾一维树状数组 假设一维数组为A[i](i=1,2,...n),则与它对应的树状数组C[i](i=1,2,..转载 2013-10-22 21:03:07 · 826 阅读 · 0 评论 -
栈ADT
栈是一种特殊的结构,具有先进后出的性质。由于栈是一个表,因此任何实现表的方法都能实现栈。 使用数组实现 (1)类型声明 #ifndef _Stack_h struct StackRecord; typedef struct StackRecord *Stack; int IsEmpty( Stack S ); int IsFull( Stack S); Stack Crea原创 2013-09-17 15:04:23 · 567 阅读 · 0 评论 -
一笔画问题
描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。 输入 第一行只有一个正整数N(N 每组测试数据的第一行有两个正整数P,Q(P 随后的Q行,每行有两个正整数A,B(0 输出 如果存在符合条件的连线,则输出"Yes", 如果不存在符合条件的连线,输出"No"原创 2013-11-25 21:35:48 · 608 阅读 · 0 评论 -
NYOJ士兵杀敌(四)
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的事情,军师小工的任务就是原创 2013-11-04 10:16:42 · 973 阅读 · 0 评论 -
求逆序数
今天刚学了个用线段树求逆序数个数的fanfa原创 2014-07-11 16:38:18 · 510 阅读 · 0 评论