算法
夏尔的骄傲-JianChe
sholck.top此博客正在从wordpress搬到hexo
github:https://github.com/xiaer1921/
展开
-
KMP算法详解
原创链接:http://www.matrix67.com/blog/archives/115#respond 设: A="abababaababacb",B="ababacb",我们来看看KMP是怎么工作的。我们用两个指针i和j分别表示,A[i-j+ 1..i]与B[1..j]完全相等。也就是说,i是不断增加的,随着i的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符转载 2015-01-31 12:29:52 · 476 阅读 · 0 评论 -
poj 2955 Brackets 括号匹配 区间dp
题意:最多有多少括号匹配思路:区间dp,模板dp,区间合并。对于a[j]来说:刚开始的时候,转移方程为dp[i][j]=max(dp[i][j-1],dp[i][k-1]+dp[k][j-1]+2), a[k]与a[j] 匹配,结果一组数据出错([]]) 检查的时候发现dp[2][3]==2,对,dp[2][4]=4,错了,简单模拟了一下发现,dp[2][4]=dp[2]原创 2015-08-23 14:00:49 · 643 阅读 · 0 评论 -
UVA 4857 Halloween Costumes 区间背包
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2858题意:给你n天需要穿的衣服的样式,每次可以套着穿衣服,脱掉的衣服就不能再用了(可以再穿),问至少要带多少条衣服才能参加所有宴会分组背包模板题: dp[i][j];若原创 2015-08-21 14:23:11 · 1004 阅读 · 0 评论 -
hdu 2082 找单词 母函数
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2082母函数模板题:思路假如 有 (x^0+x^2+x^4)*(x^0+x^3+x^6)*(x^0+x^4+x^8)*(....)*(........) 1 2 3原创 2015-09-15 12:42:22 · 321 阅读 · 0 评论 -
HLG 2057 字典树 map
字典树模板题,但map更容易些代码:#includeusing namespace std;struct Node{ bool flag; Node *next[26]; Node() { for(int i=0;i<26;i++) { next[i]=NULL;原创 2015-09-21 14:13:13 · 345 阅读 · 0 评论 -
poj 1860 Currency Exchange 3259 Wormholes bellman 判环
1860 判断正环,res[src]=v,其他初始为0;3259 判断负环,res[src]=0,其他初始为INF=0x1f1f1f;代码: 1860#include#include#include#includeusing namespace std;const int INF=0x1f1f1f;struct Str{ int u; int v;原创 2015-11-30 22:19:59 · 337 阅读 · 0 评论 -
poj 1062 昂贵的聘礼 最短路bellman
假设等级差距为1,货物1等级为,货物2等级为2,货物等级3为3,若1先与2交易,则2无法与3交易,因为1与3相差2>1.故使 每次使 pp[edge[j].v].minn=max(pp[edge[j].v].minn,pp[edge[j].u].minn); pp[edge[j].v].maxx=min(pp[e原创 2015-12-01 19:31:56 · 437 阅读 · 0 评论 -
hdu 3790 最短路径问题 最短路Dijkstra
做图论的都是上辈子折翼的天使。。。有点难想,但又明确的思路,程序很好打清除所有点的标号设d[0]=0,其他d[i]=INF循环n次{ 在所以未标号结点中,选出d值最小的节点x 标记节点x 对于从x出发的所有边(x,y), 更新d[y]=min(d[y],d[x]+w(x,y));}错了几次第一次把路程和金钱分开处理了,很快查出原创 2015-07-31 21:08:06 · 437 阅读 · 0 评论 -
hdu 2489 Minimal Ratio Tree 最小生成树kruskal
这道题在大一团队训练赛上见过,很多人一次过了,是一道dfs+最小生成树,王昊天学长讲的时候也是三言两语带过,我有点不确定哈理工的水平什么·时候这么高了。。组合dfs取出m个点,用这m个点构建最小生成树,这m个点的权值和是一定的,故边权值最小,则比才会最小;思路:在Edge中选最小的,若这两点有一个不是m个点中的,就不把它放入树中;以为自己过不了,结果一次ac;这道题有很多人卡在权值比上原创 2015-07-30 07:28:22 · 500 阅读 · 0 评论 -
hdu 1712 ACboy needs your help 简单组合dp
发觉dp真的好神奇,以前看0-1背包的代码真是茫茫然,现在能讲出个123来了;这道题看崔添翼大神的背包九讲中的组合背包代码:0-1背包也可以看刘汝佳的算法竞赛之入门经典271页#include#includeusing namespace std;int a[110][110];int dp[110];int main(){ int n,m; while原创 2015-07-23 21:56:36 · 365 阅读 · 0 评论 -
树状数组+散列
树状数组 求逆序数 poj 2299这里说的很好,把求逆序的步骤说的很明白,我也是看完才懂的,之前自己想了很久就是不明白为什么可以用树状数组求逆序 转载:树状数组,具体的说是 离散化+树状数组。这也是学习树状数组的第一题.算法的大体流程就是:1.先对输入的数组离散化,使得各个元素比较接近,而不是离散的,2.接着,运用树状数组的标准操作来累计数组的逆序数。算法详转载 2015-03-14 20:00:18 · 339 阅读 · 0 评论 -
poj 2965 The Pilots Brothers' refrigerator 普通dfs 超时 暑假第二题
代码://#include#include#include//using namespace std;int step=0;int visit[5][5]= {0};char a[5][5];bool b[5][5];bool c[5][5];int k=0;struct Str{ int x; int y;};Str d[50];void roll原创 2015-07-06 10:01:31 · 412 阅读 · 0 评论 -
常用排序算法总结(一) 比较算法总结
转载链接:http://www.cnblogs.com/eniac12/p/5329396.html目录冒泡排序 鸡尾酒排序 选择排序插入排序二分插入排序 希尔排序 归并排序堆排序快速排序 我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 排序算法大体可分为两种: 一种是比转载 2017-07-07 13:01:57 · 290 阅读 · 0 评论 -
常用排序算法总结(二)
转载地址:http://www.cnblogs.com/eniac12/p/5332117.html 目录计数排序基数排序桶排序 上一篇文章中我们总结了常用的比较排序算法,主要有冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 这篇文章中我们来探讨一下常用的非比较排序算法:计数排序,基数排序,桶排序。在一定条件下,它们的时间复杂度可转载 2017-08-06 22:36:44 · 310 阅读 · 0 评论 -
hrbust 1339 Touring 最短路Dijkstra 邻接表
题目描述:两个人从同一出发点去不同的地方,路的距离会造成花费的多少,所以两个人走的越短越好,并且两个人同乘一辆车可以使花费更低,给出每条路所连接的两个城市及该线路的花费以及两个人的出发点和他们各自的目的地,求他们需要的最小花费是多少分析:先同乘一段距离,再分开走,形走路线是一个Y形路线,找出一个点,使他到出发点以及他们各自的目的地三个地方的最短距离的和最小,这三个距离的和就是他们所需的原创 2015-08-02 12:03:38 · 583 阅读 · 0 评论 -
hdu 1102 Constructing Roads 最小生成树Kruskal
这原本是最小生成树prim部分的题,但感觉kruskal好用,就用kruskal 打了这道题题意有点变扭,修路,使所有村庄连通,使修路的街道总长度最小;原本还以为使街道的总长度最小,但案例过不了才发觉使已经修了的路的权值为0,其他路的权值当然为路的长度,模板题代码:#include#include#includeusing namespace std;int n;cons原创 2015-07-30 07:11:23 · 385 阅读 · 0 评论 -
poj 1797 Heavy Transportation 最小生成树 最大生成树
题意是说,找出使点1到点n的连通的所有路径上权值最小边的最大值,即有路能连通所有点,这路上的最大权值为x,找出最小的x;这是最小生成树的模板题;可以按照最小生成树kruskal的贪心思想,依次寻找图中从小到大的边,则加入树的权值从小到大,直到1点和n点全部连通,此时假如树的边的权值即为解代码:代码中的有关r数组的部分可以不加。因为没打cnt==n-1 break; wr好几次原创 2015-07-30 06:56:38 · 489 阅读 · 0 评论 -
最长上升子序列(1)
O(n^2)算法分析如下: (a[1]...a[n] 存的都是输入的数) 1、对于a[n]来说,由于它是最后一个数,所以当从a[n]开始查找时,只存在长度为1的不下降子序列; 2、若从a[n-1]开始查找,则存在下面的两种可能性: (1)若a[n-1] (2)若a[n-1] > a[n] 则存在长度为1的不下降子序列 a[n-1]或者a[n]。转载 2015-02-09 20:37:52 · 494 阅读 · 0 评论 -
poj 2965 The Pilots Brothers' refrigerator 高斯消元法 暑假第二题
文章中的名词理解;1.翻转:+到-或-到+2。操作:即为对其行和列的点翻转1.首先得明白,对一个点只能进行奇次操作,即操作一次。取反原理2.证明:要使一个为'+'的符号变为'-',必须其相应的行和列的操作数为奇数;可以证明,如果'+'位置对应的行和列上每一个位置都进行一次操作,则整个图只有这一'+'位置的符号改变,其余都不会改变.思路如下:红色点将为接下来进行的操作点假如为原创 2015-07-02 21:26:54 · 501 阅读 · 0 评论 -
zoj 3745 Salary Increasing 哈希
四个小时,各种方法打,各种超时。。最后同学提醒是哈希才恍然大悟,,自己真是太水了结果自己再打时还是因为一点没注意到wr了两次。。注意t[i+c]+=t[i],不是t[i+c]=t[i];代码:#include#include#includeusing namespace std;int t[200010]={0};int main(){ int a,b;原创 2015-07-21 19:19:15 · 457 阅读 · 0 评论 -
zoj 3741 Eternal Reality DP
参考链接:http://blog.csdn.net/night_raven/article/details/18523473思路:学园都市内有等级从0-5的能力者,先给定你的等级(0--5),给出n个你的对手Ai(0--6),只有你的等级大于等于Ai你才能胜利并且拿到一分,另外你还可以开挂,在第i回合使用外挂,[I,I+X-1]回合里你等等级+1(如果你是LV5,开挂后还是LV5),并且[转载 2015-07-21 22:23:25 · 403 阅读 · 0 评论 -
hdu 1709 The Balance
我感觉这种题正是现在的我应该做的,感觉学到东西了,而不是坑的无奈比赛时我就算看了估计也做不出来,压根不会想到dp那;这个题是一个基础0-1dp吧,许多人用了母函数,但我基本不知道母函数是什么,无奈思路:dp[i][j]表示前i个物体是否能测量物体j,是为true,反为false;状态转移方程:dp[i-1][j]==1,则dp[i][j+a[i]]=1;dp[i][abs(原创 2015-07-22 21:50:12 · 346 阅读 · 0 评论 -
hdu 1710 Binary Tree Traversals 二叉树的遍历
参考链接:http://www.cnblogs.com/jiangjing/archive/2013/01/14/2860163.html根据前序与中序推后序大题思路:void dfs(){ lchild();//左孩子 rchild();//右孩子 dateBT();//输出根}细节理解:i的作用找出根在中序的位置,推出i,从而原创 2015-07-23 21:33:11 · 523 阅读 · 0 评论 -
hdu 2898 旋转 三维空间一点绕一轴旋转后坐标 几何
参考链接:http://m.blog.csdn.net/blog/YJX_xx/24883665实用代码函数:#include#include#include#include#includeusing namespace std;float aa[4],bb[4];float theta;float c;float s;void Rotate_Point3D(flo转载 2015-07-24 19:04:13 · 1687 阅读 · 0 评论 -
hdu 2892 area 有向面积 三角剖分运用 模板题
第一次见到这种题,有想法,不会打。。。代码太长了,有几个链接不错http://www.xuebuyuan.com/1749999.html //个人认为这个讲的最详细http://blog.csdn.net/ch2010091/article/details/7786450ac代码:#include #include #include using na转载 2015-07-24 20:13:02 · 464 阅读 · 0 评论 -
hdu 1936 Emoticons :-)
比赛时这道题并没多想,当高放说是区间覆盖贪心的时候,已崩溃,区间贪心前两天刚做过,poj 1328,还打了博客,结果比赛时就是没想到。。这道题算是一道稍微麻烦点。。题意:其实就是对每一行分别使用贪心,最后把修改的点的和加起来参考链接:http://www.cnblogs.com/cheater/p/4675043.html我和参考中的贪心代码有点不同,他是从后往前搜,排序是x.原创 2015-07-25 22:30:46 · 548 阅读 · 0 评论 -
hdu 1937 Finding Seats 尺取法
这道题主要就是选一个对角矩阵,使得其内的可用座位》=k,求满足这个条件的最小矩阵面积三重循环加优化,最内层为尺取法,复杂度大概为300;故空间复杂度为300^3,不会超时,同时第三层内的搜索与判断都应为加法级别的;第一次打的时候判断一个区域内的可用座位是暴力搜索,最麻烦的时候复杂度达到300^5,。。超时看了其他人的代码才明白;先进行一个对矩阵内可用座位的预处理,复杂度为3原创 2015-07-25 22:58:10 · 968 阅读 · 0 评论 -
hdu 1941 Justice League 无向完全图
就是有一些人和一些关系,从中选出一些人,他们与联盟中其他人都有关系,即构成完全图,剩下的其他人不能有一个关系首先,度为0和1的应该先去掉,同时标记(与去掉的点)相关联的点为不可去掉,度同时-1,否则去掉的集合里就会出现关系;继续搜索度更高的点,把可去的去掉,标记与其关联的点为不可去重复上述操作,直到没有点可以去掉,此时判断是否为完全图,即不可去点的个数==min(deg[u]+1),u原创 2015-07-26 14:34:42 · 1000 阅读 · 0 评论 -
hdu 1285 确定比赛名次 拓扑排序模板题 优先队列
因为近期比赛有很多图论,但我不会,所以从头开始学,除了bfs判断连通外,这是第一个重点吧,以后都会用到拓扑排序主要解决的问题是 比赛名次构建的有向无环图,若有环,则不存在拓扑排序;主要是根据入度和队列来解决的;若输出序编号小的排前边,则用优先队列;代码:#include#include#include#includeusing namespace std;const原创 2015-07-30 06:35:59 · 515 阅读 · 0 评论 -
BF算法
转载地址:http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.htmlBF算法(优化以后为kmp算法) BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依转载 2015-01-30 10:56:26 · 725 阅读 · 0 评论