![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【算法总结】
herongweiV
喜爱编程,热爱算法。
展开
-
POJ-1753-Flip Game【翻转棋盘+枚举+dfs】
【链接】:click here 【题意】: 给你一个4*4棋盘,上面有且仅有白色(w)和黑色(b)两种颜色标记,并且,如果正面是白色,反面则是黑色,反之亦然。 现在让你翻转棋盘,问最少翻转多少次,使得最后棋盘的颜色统一(即全为白色或者全为黑色)。 如果不能翻转成功,则输出Impossible;否则,输出翻转成功的最小次数。 注意:翻转方法,如果你翻转了一个棋盘的原创 2017-02-02 19:18:09 · 1788 阅读 · 0 评论 -
DP-编辑距离问题
【题意】设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括 (1)删除一个字符; (2)插入一个字符; (3)将一个字符改为另一个字符。 将字符串A变换为字符串B所用的最少字符操作数称为字符串A到B的编辑距离,记为d(A,B)。试设计一个有效算法,对任给的2个字符串A和B,计算出它们的编辑距离d(A,原创 2017-01-24 17:13:29 · 671 阅读 · 0 评论 -
【编程之美 】-中国象棋将帅问题
【描述】《编程之美》上的此问题是有一定限制的:把“将”和“帅”限制在一个3*3的网格中,那么根据规则是“将”和“帅”是不能同在一条竖线的位置,求出所有符合条件的“将”和“帅”的位置,并且只用一个变量来储存。 【思路】书上给出了几个解答: (1)第一个答案用二进制来表示,稍微有点复杂:一个8位的byte类型能够表达2^8=256个值,所以用它来表示A,B的位置信息绰绰有余,因此可以把字节的变量原创 2017-02-10 13:46:21 · 580 阅读 · 0 评论 -
最小生成树Prim算法的priority_queue优化
【链接】:http://hihocoder.com/problemset/problem/1109小Hi这时暂时完成了今天的游戏日常,回过头来对小Ho道:“其实主要是Prim算法本身还有很多需要优化的地方,比如用堆就可以很好的解决求最小值部分和合并节点的问题。”。小Ho想了想,道:“堆?求最小值的问题……让我想想,每次将1号节点与一个新的节点K合并的时候,等于是将原来节点K相连的边统统改连到1号节点原创 2017-02-28 10:37:18 · 3400 阅读 · 2 评论 -
【LeetCode】338Counting Bits
【链接】:counting bits【描述】: Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1’s in their binary representation and return them as an array.Exa原创 2017-02-09 17:04:36 · 449 阅读 · 0 评论 -
【LeetCode】 476. Number Complement
【链接】:number complement 【描述】: Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.Note: The given integer is guaranteed to原创 2017-02-09 16:13:22 · 608 阅读 · 0 评论 -
【LeetCode】500. Keyboard Row
【链接】:keyboard-row 【描述】: Given a List of words, return the words that can be typed using letters of alphabet on only one row’s of American keyboard like the image below. American keyboardExample 1:原创 2017-02-08 13:13:23 · 2408 阅读 · 0 评论 -
【LeetCode】496. Next Greater Element I
【链接】:next-greater-element-I 【描述】:You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1’s elements in the原创 2017-02-08 11:56:28 · 1727 阅读 · 0 评论 -
【LeetCode】461Hamming Distance
【链接】:461Hamming Distance 【描述】: The Hamming distance between two integers is the number of positions at which the corresponding bits are different.Given two integers x and y, calculate the Hamming dis原创 2017-02-08 11:15:17 · 514 阅读 · 0 评论 -
【leetCode】001Two Sum
【链接】:Two Sum【描述】:Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not原创 2017-02-06 23:45:13 · 395 阅读 · 0 评论 -
括号配对问题(I && II)
括号配对问题I时间限制:3000 ms | 内存限制:65535 KB难度:3描述现在,有一行括号序列,请你检查这行括号是否配对。输入第一行输入一个数N(0输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入3[(])(])([[]()])样例输出NoNoYes原创 2016-04-07 21:40:54 · 1335 阅读 · 0 评论 -
二叉树之已知前序和中序遍历求后序遍历(POJ &&HDU )
POJ2255【题目链接】click here~~代码:/** Problem: POJ No.2255 && UVA 536* Running time: 0MS* Complier: G++* Author: javaherongwei* Create Time: 2015-08-18 10:35:06 星期五* binary search tree*/#include原创 2015-09-16 14:51:30 · 3042 阅读 · 0 评论 -
欧拉回路的判断
最近多校碰到几道和欧拉回路相关的题目,这里做个总结代码:dfs 递归实现:如果是欧拉回路,则输出“1”,否则输出“0”。#include using namespace std;const int N=1005;int G[N][N];///邻接矩阵存储图int vis[N];///遍历时标记该点是否被访问过int deg[N];///存储节点的度void dfs(int翻译 2015-08-05 18:25:38 · 1000 阅读 · 0 评论 -
【中缀表达式转后缀表达式&&输出计算结果】
【描述】参见NYOJ 35/*****************Aythor:herongwei;Date:2017/2/24 17:42****************/#include <iostream>#include <stdio.h>#include <stack>#include <queue>#include <vector>#include <string.h>#原创 2017-02-24 17:46:30 · 867 阅读 · 0 评论 -
KMP的朴素算法与改进
KMPs算法:KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。代码:/********原创 2017-02-25 13:44:01 · 682 阅读 · 0 评论 -
【HDU 1427 计算24点 DFS】
【题目描述】:速算24点Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5213 Accepted Submission(s): 1343Problem Description速算24点相信绝大原创 2017-06-04 16:20:38 · 617 阅读 · 0 评论 -
【HDU 1109 Run Away 模拟退火算法】
【链接】: http://acm.hdu.edu.cn/showproblem.php?pid=1109 【题目】: Run AwayTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s)原创 2017-06-17 23:41:47 · 922 阅读 · 0 评论 -
【POJ-3318-Matrix Multiplication 随机化算法】
【题目链接】: http://poj.org/problem?id=3318 【题目描述】:You are given three n × n matrices A, B andC. Does the equation A × B = C hold true?Input The first line of input contains a po原创 2017-06-17 23:40:14 · 504 阅读 · 0 评论 -
【剑指offer之和为s的两个数字VS和为s的连续正数序列】
【题目一】:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。例如输入数组{1,2,4,7,11,15}和数字15.由于4+11 = 15,因此输出4和11。【技能get &&思路】: 【代码】:#include using namespace std;原创 2017-05-18 21:37:14 · 909 阅读 · 0 评论 -
【剑指offer之最大子向量和(连续子数组的最大和)】
【题目链接】:click here~~ 【题目描述】:题目1372:最大子向量和(连续子数组的最大和)时间限制:1 秒内存限制:32 兆特殊判题:否提交:2987解决:784题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天JOBDU测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计原创 2017-04-26 23:20:33 · 819 阅读 · 0 评论 -
【剑指offer之数组中只出现一次的数字】
【链接】:http://ac.jobdu.com/problem.php?pid=1351 【题目】: 题目1351:数组中只出现一次的数字 时间限制:1 秒内存限制:32 兆特殊判题:否提交:3381解决:979 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 输入: 每个测试案例包括两行: 第一行包含一个整数n,表示数组大原创 2017-04-25 23:24:05 · 738 阅读 · 0 评论 -
【BJTU+求和+线段树】
【题目描述】:题面描述某一天, calfcamel 问二哥,有道数学题怎么做呀?二哥看了一下说我不会呀,于是二哥找到了你,请你帮他解决这个问题,这样二哥就可以鄙视 calfcamel 数学菜了。给你一个长度为 n 的整数序列 a ,对该序列有 q 个查询,每次询问涉及序列中从 left 到 right 之间的数,包括 left 和 right ,请给出公式的结果。即输出原创 2017-05-10 21:34:32 · 977 阅读 · 2 评论 -
【经典汉诺塔问题】
【题目描述】: 题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。游戏中的每一步规则如下:每一步只允许移动一个盘子(从一根柱子最上方到另一个柱子的最上方)移动的过程中,你必须保证原创 2017-05-10 21:33:00 · 706 阅读 · 0 评论 -
【FFT快速傅里叶变换】【模板】
【题目链接】:http://uoj.ac/problem/34【题目描述】:#34. 多项式乘法 统计 描述 提交 自定义测试这是一道模板题。给你两个多项式,请输出乘起来后的多项式。输入格式第一行两个整数 nn 和 mm,分别表示两个多项式的次数。第二行 n+1n+1 个整数,分别表示第一个多项式的 00 到 nn 次项前的系数。第三原创 2017-04-29 23:16:14 · 3162 阅读 · 0 评论 -
【剑指offer之圆圈中最后剩下的数】
【题目链接】:http://ac.jobdu.com/problem.php?pid=1356【题目描述】:题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。【思路】分析:本题就是有原创 2017-04-29 23:14:38 · 841 阅读 · 0 评论 -
HDU 2199 Can you solve this equation?(牛顿迭代法)
【链接】:click here~~ 【描述】: Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its solution between 0 and 100; Now please try your lucky. Input The first line of the input conta原创 2017-03-12 00:17:26 · 521 阅读 · 0 评论 -
邻接矩阵表示图的深度优先搜索和广度优先搜索
图的深度优先搜索(DFS):可以被形象的描述为“打破沙锅问到底”,具体一点就是访问一个顶点之后,我继而访问它的下一个邻接的顶点,如此往复,直到当前顶点一被访问或者它不存在邻接的顶点。同样,算法导论采用了“聪明的做法”,用三种颜色来标记三种状态。但这三种状态不同于广度优先搜索:WHITE 未访问顶点GRAY 一条深度搜索路径上的顶点,即被发现时BLACK 此顶点的邻接顶点被全部访问完原创 2017-02-26 17:05:23 · 2446 阅读 · 2 评论 -
图的邻接表的表示方法
图的邻接表形式,加深印象,例图: 数据结构书上表示邻接表比较复杂,一般形式如下:Cpp代码 typedef struct Node { int dest; //邻接边的弧头结点序号 int weight; //权值信息 str翻译 2015-07-30 10:42:13 · 1302 阅读 · 0 评论 -
匈牙利算法
原文转载:click here~~匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名。匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。-------等等,看得头大?那么请看下面的版本:通过数代人的努力,你终于赶上了剩男剩女的大潮,假设你是一位光荣的新翻译 2015-07-26 19:17:52 · 876 阅读 · 0 评论 -
拓扑排序再续
【拓扑排序问题】解决方法:1. 计算每一个点的入度值deg[i],这一步需要扫描所有点和边,复杂度O(N+M)。2. 把入度为0的点加入队列Q中,当然有可能存在多个入度为0的点,同时它们之间也不会存在连接关系,所以按照任意顺序加入Q都是可以的。3. 从Q中取出一个点p。对于每一个未删除且与p相连的点q,deg[q] = deg[q] - 1;如果deg[q]==0,翻译 2015-06-08 17:12:48 · 1292 阅读 · 0 评论 -
叉积--求两条直线(线段)的交点
如图,如何转载 2014-11-08 19:20:56 · 8917 阅读 · 0 评论 -
扩展欧几里得算法
直线上的点,求直线ax+by+c=0上有多少个整点(x,y)翻译 2014-11-16 09:19:41 · 1227 阅读 · 0 评论 -
优先队列及最小堆最大堆
为什么优先队列里默认是堆(heap)实现,默认是优先级高的出队,定义结构体重载函数为什么要按照从小到大排序?原来是自己对优先队列还不太了解:1 堆 1.1 简介n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质):(1)ki=号。//k(i)相当于二叉树的非叶结点,K(2i)则是左孩子,k(2i+1)是右孩子若翻译 2015-06-20 16:30:08 · 1690 阅读 · 0 评论 -
ACM搜索算法总结
搜索是ACM竞赛中的常见算法,本文的主要内容就是分析它的 特点,以及在实际问题中如何合理的选择搜索方法,提高效率。文章的第一部分首先分析了各种基本的搜索及其各自的特点。第二部分在基本搜索方法的基础上提出 一些更高级的搜索,提高搜索的效率。第三部分将搜索和动态规划结合,高效地解决实际问题,体现搜索的广泛应用性。第四部分总结全文。文章在分析各种搜索的同时,分析了我们在解题中应该怎样合理利用它,翻译 2014-04-07 21:45:39 · 2634 阅读 · 0 评论 -
map 容器常用功能小结
具体功能参考:click here~~#include using namespace std;int main(){ /*map.at:修改元素值 mapmm= { { "abc",0}, { "bcd",0}, }; mm.at("abc")=-7; mm.at("bcd")=20; for(au原创 2015-06-19 13:05:17 · 904 阅读 · 0 评论 -
字典树(Trie)
字典树,顾名思义,就是一种对字母等字符串进行处理的一种特殊数据结构。说白了,就是二十六叉树。定义一个头指针,每次从头指针开始操作。有两种常用的操作:1.查询某个字符串的出现次数。每个节点的count置为0,直到这个字符串结束,在末尾处count++.这样,就记录了该字符串的出现次数。2.查询某个字符串特定序列出现的次数。每个节点的count初始化为0,当读入翻译 2015-06-17 14:31:18 · 870 阅读 · 0 评论 -
拓扑排序-图论
假设我们有一组任务要完成,并且有些任务要在其它任务完成之后才能开始,所以我们必须非常小心这些任务的执行顺序。如果这些任务的执行顺序足够简单的话,我们可以用链表来存储它们,这是一个很好的方案,让我们可以准确知道任务的执行顺序。问题是有时候不同任务之间的关系是非常复杂的,有些任务依赖于两个甚至更多的任务,或者反过来很多任务依赖自己。因此我们不能通过链表或者树的数据结构来对这个问题建模。对这类问翻译 2015-03-16 18:38:25 · 1053 阅读 · 0 评论 -
[转载]C++ *max【min】_element函数找最大,小元素
#include#includeusing namespace std;int main(){int n[]={1,4,22,3,8,5};int len=sizeof(n)/sizeof(int);cout<<*max_element(n,n+len)<<endl;cout<<*min_element(n,n+len)<<endl;return 0;}结果:22转载 2014-11-27 11:30:18 · 1136 阅读 · 0 评论 -
超有爱的并查集~~~~【转载】:
例子就是杭电上的畅通工程:http://acm.hdu.edu.cn/showproblem.php?pid=1232首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路,转载 2014-11-17 15:37:39 · 882 阅读 · 0 评论 -
计算几何题集
//第一期计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板很重要,模板必须高度可靠。3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面大部分是模板。如果代码一片混乱,那么会严重影响做题正确率。4.注意精度控制。5.能用整数的地方尽量用整数,要想到扩大数据的方法(扩大一倍,或扩大sqrt2)。因为整数不用考虑浮点误转载 2014-11-09 21:02:07 · 906 阅读 · 0 评论