
算法
qq1978366308
这个作者很懒,什么都没留下…
展开
-
01背包问题 泪的告白
01背包问题具体例子:假设现有容量10kg的背包,另外有3个物品,分别为a1,a2,a3。物品a1重量为3kg,价值为4;物品a2重量为4kg,价值为5;物品a3重量为5kg,价值为6。将哪些物品放入背包可使得背包中的总价值最大? 这个问题有两种解法,动态规划和贪婪算法。 首先想到的,一般是穷举法,一个一个地试,对于数目小的例子适用,如果容量增大,物品增多,这种方法就无用武原创 2015-08-13 17:31:12 · 329 阅读 · 0 评论 -
士兵杀敌(二)(线段树)
士兵杀敌(二)描述南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。 输入只有一组测试数据 第一行是两个整数N,M,其中N表示士兵的个数(1输出对于每次查询转载 2015-12-05 17:42:56 · 695 阅读 · 0 评论 -
郁闷的C小加(一)
郁闷的C小加(一)时间限制:1000 ms | 内存限制:65535 KB难度:3描述我们熟悉的表达式如a+b、a+b*(c+d)等都属于中缀表达式。中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2。同理,后缀表达式就是操作符在两个操作数之后:num1 num2 operand。ACM队的“C小加”正在郁闷怎样把一个中缀表达原创 2015-11-27 17:50:24 · 362 阅读 · 0 评论 -
南阳 重建二叉树
重建二叉树时间限制:1000 ms | 内存限制:65535 KB难度:3描述题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。输入输入有多组数据(少于100组),以文件结尾结束。每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)。输出每组输出转载 2015-11-27 17:10:07 · 299 阅读 · 0 评论 -
nyoj-----前缀式计算
描述先说明一下什么是中缀式:如2+(3+4)*5这种我们最常见的式子就是中缀式。而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))然后把运算符写到括号前面就是+(2 *( +(3 4) 5) )把括号去掉就是:+ 2 * + 3 4 5最后这个式子就是该表达式的前缀表示。给你一个前缀表达式,请你计算出该前缀式的值。比如:转载 2015-11-27 17:36:50 · 378 阅读 · 0 评论 -
前缀式计算
前缀式计算时间限制:1000 ms | 内存限制:65535 KB难度:3描述先说明一下什么是中缀式:如2+(3+4)*5这种我们最常见的式子就是中缀式。而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))然后把运算符写到括号前面就是+(2 *( +(3 4) 5) )把括号去掉就是:+ 2 * + 3 4 5原创 2015-12-06 18:43:35 · 330 阅读 · 0 评论 -
nyoj 138 找球号(二)(哈希)
找球号(二)时间限制:1000 ms | 内存限制:65535 KB难度:5描述在某一国度里流行着一种游戏。游戏规则为:现有一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,还有一个空箱子,现在有两种动作:一种是"ADD",表示向空箱子里放m(0<m<=100)个球,另一种是"QUERY”,表示说出M(0<M<=100)个随机整转载 2015-12-07 11:11:10 · 346 阅读 · 0 评论 -
发工资咯:)
发工资咯:)Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 39786 Accepted Submission(s): 22115Problem Description作为杭电的老师,最盼望的日子就是每月的8号原创 2015-08-13 09:14:24 · 130 阅读 · 0 评论 -
不撞南墙不回头——树形动态规划(树规)
不撞南墙不回头——树规总结 焦作一中信息学oy 之所以这样命名树规,是因为树规的这一特殊性:没有环,dfs是不会重复,而且具有明显而转载 2015-08-12 18:34:57 · 679 阅读 · 0 评论 -
数塔
hduoj2084,数塔,DP经典分类: 动态规划 2012-10-15 09:21 156人阅读 评论(0)收藏 举报数塔在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?已经告诉你了,这是个DP的题目,你能AC吗?转载 2015-07-25 13:27:43 · 392 阅读 · 0 评论 -
又见01背包
又见01背包时间限制:1000 ms | 内存限制:65535 KB难度:3描述 有n个重量和价值分别为wi 和 vi 的 物品,从这些物品中选择总重量不超过 W 的物品,求所有挑选方案中物品价值总和的最大值。 1 1 1 1 输入多组测试数据。每组测试数据第一行输入,n 和 W ,接下来有n行,每行输转载 2015-08-13 20:01:02 · 83 阅读 · 0 评论 -
NYOJ311 完全背包
初始化的细节问题我们看到的求最优解的背包问题题目中,事实上有两种不太相同的问法。有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背包装满。一种区别这两种问法的实现方法是在初始化的时候有所不同。如果是第一种问法,要求恰好装满背包,那么在初始化时除了f[0]为0其它f[1..V]均设为-∞,这样就可以保证最终得到的f[N]是一种恰好装满背包的最优解。如果并没有要求转载 2015-08-26 18:04:03 · 300 阅读 · 0 评论 -
杭电 1248(完全背包)
寒冰王座Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13252 Accepted Submission(s): 6770Problem Description不死族的巫妖王发工资拉,死亡骑士拿到一张原创 2015-08-26 20:02:27 · 277 阅读 · 0 评论 -
void InitStack( SqStack *&S)
这样的表示确实是有的,我来详细介绍一下.其中,&表示引用,而*表示指针.我们来看一下,如果你的参数写成 void initstack(sqstack *s)这是什么意思呢,想必都知道,就是把main()函数中的一个定义的指针赋值给指针s,这就说到了对于函数参数传递的问题,函数的参数传递分为引用和非引用那么它们的区别是什么呢?举个例子#includeusing namespa转载 2015-07-27 09:24:17 · 21700 阅读 · 1 评论 -
一维树状数组
2013-05-30 20:54 329人阅读 评论(0)收藏 举报一维树状数组 一维数组相信大家平时都是经常使用,对于一维数组而言,查询以及求和的时间复杂度分别为O(1) 和 O(n) 。 今天我们介绍一个新的数据结构——树状数组英文名称为Binary Index Tree,直译过来就是二进制索引树,我觉得二进制索引树更能说明其本质。树状数组转载 2015-08-05 19:43:47 · 114 阅读 · 0 评论 -
偶数求和
偶数求和Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 58474 Accepted Submission(s): 25545Problem Description有一个长度为n(n Input输入数据有多组,每组占一行,包含原创 2015-08-11 15:44:34 · 411 阅读 · 0 评论 -
NYOJ-63 小猴子下落【满二叉树】
解题思路:方法一。数据少时;暴力就过了(用的模拟法做)。方法二:数据大时:超时是明显的。因为D今天看到了一种优化,非常巧妙。因为每个小猴子都是从根节点向下,它必然有两种选择:左、右。而且有规律,它前面的两个猴子一定是左,右。所以在每个节点进入根节点时,我们只需要判断这个点的奇偶性就知道它的方向了。然后它进入根节点的下一层,依然有两种选择,同样的判断,但是数据规模减少转载 2015-12-04 09:45:52 · 344 阅读 · 0 评论 -
南阳(113)字符串替换--strstr函数
strstr是一种函数,从字符串str1中查找是否有符串str2,如果有,从str1中的str2位置起,返回str1的指针,如果没有,返回null。字符串替换时间限制:3000 ms | 内存限制:65535 KB难度:2描述编写一个程序实现将字符串中的所有"you"替换成"we"输入输入包含多行数据 每行数据是一个字符串,长转载 2015-10-28 18:34:40 · 503 阅读 · 0 评论 -
最小生成树(普利姆算法、克鲁斯卡尔算法) .
算法给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树.求最小生成树的算法(1) 克鲁斯卡尔算法图的存贮结构采用边集数组,且权值相等的边在数组中排列次序可以是任意的.该方法对于边相对比较多的不是很实用,浪费时间.(2) 普里姆算法图的存贮结构采用邻接矩阵.此方法是按各个顶点连通的步骤进行,需要用一个顶点集合,开始为空集,以后将以连转载 2015-08-11 08:46:07 · 381 阅读 · 0 评论 -
欧拉函数
定义:在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function,例如φ(8)=4,因为1,3,5,7均和8互质。φ函数的值 通式:φ(x) = x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。转载 2015-08-24 17:05:04 · 467 阅读 · 0 评论 -
Just a Numble模拟除法的运算
Just a NumbleTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1526 Accepted Submission(s): 675Problem DescriptionNow give yo转载 2015-08-27 11:15:59 · 349 阅读 · 0 评论 -
杭电(1269)迷宫城堡(强联通之定义算法)
迷宫城堡Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 10364 Accepted Submission(s): 4653Problem Description为了训练小希的方向感,Gardon建立了一座大城堡,里面有N转载 2015-10-19 21:53:15 · 386 阅读 · 0 评论 -
long long 与int的区别
long long 与int的区别今天我做一道题的时候发现用int的时候数据会溢出,用long long就不会。于是我想看一下long long 到底可以存多大的数,在devc里我对long long i=10000000000;的时候可以,但不能比这大了,再然后我发现int也有这么大。我纳闷了,怎么会出现这种情况?long long和int到底区别在哪里?转载 2015-08-08 17:22:19 · 4615 阅读 · 1 评论 -
最长公共子序列(LCS)
两重循环方法 使用两重循环进行字符串的对齐匹配过程如下图所示:第一重循环确定第一个字符串的对齐位置,第二重循环确定第二个字符串的对齐位置,每次循环确定一组两个字符串的对齐位置,并从此对齐位置开始匹配两个字符串的最长子串,如果匹配到的最长子串比已知的(由前面的匹配过程找到的)最长子串长,则更新已知最长子串的内容。两重循环的实现算法如下: 图(1)两重循环字符串对齐匹转载 2015-08-10 11:12:57 · 353 阅读 · 0 评论 -
排序总结
一、直接插入排序(插入排序)。 1、思想:如下图所示,每次选择一个元素K插入到之前已排好序的部分A[1…i]中,插入过程中K依次由后向前与A[1…i]中的元素进行比较。若发现发现A[x]>=K,则将K插入到A[x]的后面,插入前需要移动元素。 3、算法时间复杂度。 最好的情况下:正序有序(从小到大),这样只需要比较n次,不需要移动。因此时间复杂原创 2015-08-24 15:46:34 · 299 阅读 · 0 评论 -
long long与__64int的区别
#includeint main(){ long long a,b; while(scanf("%lld%lld",&a,&b)!=EOF) { printf("%lld\n",a/b); } return 0;}#includeint main(){ __int64 a,b; while(scanf("%I64d%I64d",&a,&b)!=EOF原创 2015-09-25 17:03:45 · 387 阅读 · 0 评论 -
Little Rooks(简单组合数学)
DescriptionA rook is a piece used in the game of chess which is played on a board of square grids. A rook can only move vertically or horizontally from its current position and two rooks attack ea转载 2015-10-26 21:08:20 · 358 阅读 · 0 评论 -
KMP算法
分类: 算法2012-10-09 11:11 3404人阅读 评论(2) 收藏 举报算法c题目:经典的KMP算法分析:和KMP算法对应的是BF算法,其中BF算法时间复杂度,最坏情况下可以达到O(n*m),而KMP算法的时间复杂度是O(n + m),所以,KMP算法效率高很多。但是KMP算法不太好理解,其中牵涉到next数组,目标就是让模式串尽可能的往右滑动,减少转载 2015-08-07 12:49:53 · 292 阅读 · 0 评论 -
最短路径—Dijkstra算法和Floyd算法
Dijkstra算法1.定义概览Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法是很有代表性的最短路径算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。注意该算法要求图中不存在负权边。问题描述:在无向图 G=(V,转载 2015-08-10 18:01:21 · 287 阅读 · 0 评论 -
C++ string 用法详解
C++ 语言是个十分优秀的语言,但优秀并不表示完美。还是有许多人不愿意使用C或者C++,为什么?原因众多,其中之一就是C/C++的文本处理功能太麻烦,用起来很不方便。以前没有接触过其他语言时,每当别人这么说,我总是不屑一顾,认为他们根本就没有领会C++的精华,或者不太懂C++,现在我接触 perl, php, 和Shell脚本以后,开始理解了以前为什么有人说C++文本处理不方便了。举例来说转载 2015-08-14 08:18:38 · 395 阅读 · 0 评论 -
算菜价(输入输出)
算菜价Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 17286 Accepted Submission(s): 9379Problem Description妈妈每天都要出去买菜,但是回来后,兜里的钱原创 2015-08-24 20:32:43 · 432 阅读 · 0 评论 -
SPFA 算法详解
适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路,但这不是我们讨论的重点。算法思想:我们用数组d记录每个结点的最短路径估计值,用邻接表来存储图G。我们采取的方法是动态转载 2015-08-27 18:09:00 · 272 阅读 · 0 评论 -
杀人游戏(hdu2211)插入法
杀人游戏Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2082 Accepted Submission(s): 533Problem Description不知道你是否玩过杀人游戏,这里的杀人游戏可没有法官,警察之类的人转载 2015-10-23 21:45:06 · 456 阅读 · 0 评论 -
找球号(一)(STL)
找球号(一)时间限制:3000 ms | 内存限制:65535 KB难度:3描述在某一国度里流行着一种游戏。游戏规则为:在一堆球中,每个球上都有一个整数编号i(0<=i<=100000000),编号可重复,现在说一个随机整数k(0<=k<=100000100),判断编号为k的球是否在这堆球中(存在为"YES",否则为"NO"),先答出者为胜。现在有一个人想玩玩这转载 2015-10-16 22:04:49 · 342 阅读 · 0 评论 -
STL之map详解
一、关于map的介绍map是STL的一个容器,和set一样,map也是一种关联式容器。它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,有助于我们处理一对一数据。这里说下map内部数据的组织,map内部是自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据原创 2015-08-14 18:00:24 · 320 阅读 · 0 评论 -
STL之vector详解
vector用法:总结了下大家写的,感觉用着很方便;vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码:原创 2015-08-14 17:02:47 · 284 阅读 · 0 评论 -
poj 1564 Sum It Up 搜索
oj 1564 Sum It Up 搜索题意: 给出一个数T,再给出n个数。若n个数中有几个数(可以是一个)的和是T,就输出相加的式子。不过不能输出相同的式子。分析: 运用的是回溯法。比较特殊的一点就是不能输出相同的式子。这个可以通过map来实现:map把字符串(可以是C语言的字符串)和整数联系起来了。我们可以把相加起来的几个数变成一个字符串(2+1+1,变成“转载 2015-08-08 20:21:48 · 331 阅读 · 0 评论 -
二分图的最大匹配、完美匹配和匈牙利算法
这篇文章讲无权二分图(unweighted bipartite graph)的最大匹配(maximum matching)和完美匹配(perfect matching),以及用于求解匹配的匈牙利算法(Hungarian Algorithm);不讲带权二分图的最佳匹配。二分图:简单来说,如果图中点可以被分为两组,并且使得所有边都跨越组的边界,则这就是一个二分图。准确地说:把一个图的顶点划分为两个转载 2015-07-30 19:55:49 · 290 阅读 · 0 评论 -
字符串匹配的KMP算法
作者: 阮一峰日期: 2013年5月 1日字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knut转载 2015-08-07 10:23:33 · 231 阅读 · 0 评论 -
南阳47 过河问题(经典贪心)
过河问题时间限制:1000 ms | 内存限制:65535 KB难度:5描述在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话,大家是无论如何也不敢过桥去的。不幸的是,N个人一共只带了一只手电筒,而桥窄得只够让两个人同时过。如果各自单独过桥的话,N人所需要的时间已知;而如果两人同时过桥,所需要的时间就是走得比较慢的那个人单独行转载 2015-07-31 16:41:43 · 393 阅读 · 0 评论