
××××××算法学习××××××
文章平均质量分 76
M_GSir
这个作者很懒,什么都没留下…
展开
-
区间DP经典三道题目
题目:NYOJ 746:http://acm.nyist.NET/JudgeOnline/problem.PHP?pid=746题意:给定一个数,要求拆成m个数相乘,求最大的结果是多少代码:#include#include#include#include#define MAX 30using namespace std;long long dp[MAX][MAX原创 2017-06-17 15:33:25 · 575 阅读 · 0 评论 -
最长递增公共子序列dp(hdu 1423 hdu 4512)
问题描述:就是求两个数字数组的最长递增公共子序列,o(n*n)的复杂度,结合题目解释题目:http://acm.hdu.edu.cn/showproblem.php?pid=1423题意:给两个数字数组,求其最长的递增公共子序列的长度解释:dp[i][j]是基于dp[i-1][j],就是基于上一个数字的遍历结果的基础进行遍历,解释在代码中,ans的作用是保存1-j的上一行的最长递增原创 2016-08-10 19:27:19 · 465 阅读 · 0 评论 -
快速幂+乘法逆元+二项式定理(hdu 5793)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5793官方解释:理论:二项式定理(官方解释后面的是通过这个定理推出来的),快速幂,乘法逆元 (1/a的乘法逆元为a^(mod-2) mod为素数)代码:#include#include#include#include#include#define mod 100原创 2016-08-05 22:10:42 · 647 阅读 · 1 评论 -
树状数组(acm hdu 5792)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5792题意:给你一串数组A,要求a≠b≠c≠d,1≤ab≤n,1≤cd≤n,AaAb,Ac>Ada≠b≠c≠d,AaAb,Ac>Ad题解:先只考虑AaAb,Ac>Ad的情况,然后一个一个排除掉a==c a==d b==c b==d 这四种情况要建立4个数组,left_原创 2016-08-03 22:38:54 · 478 阅读 · 0 评论 -
Manacher算法(回文串匹配算法)
算法参考:http://www.cnblogs.com/biyeymyhjob/archive/2012/10/04/2711527.html此算法用于求回文串,可以达到o(n)的复杂度,较好的解决问题,抛去了奇数或偶数匹配的差别,下面进行应用,通过题目来讲解题目:题意:题解:代码:原创 2016-08-20 23:00:39 · 535 阅读 · 0 评论 -
最小生成树(Prim和Kruskal算法)
Prim和Kruskal也称作加点法和加边法题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=1102题意:给定一个矩阵距离,并给定一些固定的要求加进去的距离,求还要加进去多少距离,从而构成最小生成树。题解:只要把固定的距离设置为0,然后用正常的算法求解即可代码:#include#include#include#incl原创 2016-08-21 21:15:02 · 615 阅读 · 0 评论 -
网络流最大流算法(ISAP算法及DINIC算法)
这些算法网络中解释都有,所有以下是根据题目应用,代码中有注释,方便理解,ISAP算法就是通过先bfs一遍建立逆序求层数,然后每次都进行维护求最短路来求增广路径,DINIC即是通过顺序,每次找最短路径前都进行一次层次的划分,再来求最短路增广路径,直至无法划分层次出现断层。下面用两个方法来做这道题,可以作为模板使用题目:http://acm.split.hdu.edu.cn/showproblem原创 2016-08-24 19:25:53 · 1248 阅读 · 0 评论 -
AC自动机(hdu 2896 hdu 3065)
题目:hdu 2896题意:中文题目,可自己理解,简单说就是给定一些子字符串,再给出一些母字符串,找出母字符串中包含哪些子字符串题解:AC自动机模板题代码:动态申请:#include#include#include#include#include#include#define MAX 59999using namespace std;struct Node{原创 2016-09-02 10:05:47 · 345 阅读 · 0 评论 -
树状数组+离散化(hdu 5862)
题目:hdu 5862题意:给定几个线段,求有多少个线段的交点,输入解释:第一行表示测试数据,第二行表示有多少条线段,第三行开始是每个线段的两点坐标题解:树状数组+离散化(Y坐标太大,要压缩存储空间,采用离散化),先用map对y坐标进行离散化,再将与x轴平行的线段拆成两个点,一个是记录起点x坐标,一个记录末点x坐标+1(这样就可保证末点相交被记录进去,方便),与y轴平行的只要记录x坐标和两原创 2016-09-02 10:23:53 · 499 阅读 · 0 评论 -
深度优先搜索dfs(poj 1655)
题目:poj 1655题意:给定一个树状图,要求去掉一个节点,得到几个子树,并且规定这些子树中拥有的最大节点的子树的节点数为去掉该节点的平衡值,求该平衡值最小为多少,并且求出此时去掉的是哪个点,当平衡值相当时要求去掉的点的序号最小题解:建树,再进行一次深度优先搜索,找出该点的各个子树中有多少节点,取最大值,当然题目中是无向连接,所以要考虑双向,要用一个数组表示该点事前有没考虑代码:原创 2016-09-02 20:45:29 · 524 阅读 · 0 评论 -
最长递增序列(hdu 5748)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5748题意:就是求以各个数字为结尾的最长递增序列(包括本身),输出每个数字为结尾的最长递增序列的长度方法:M[i]表示序列长度为i的结尾最小的值,d[i]保存已第i为结尾的最长递增序列的长度,从第一个数开始往后判断,每次维护时先判断是否大于当前最长递增子序列的末尾值,若大于则扩充M的长度len,原创 2016-08-07 11:01:52 · 410 阅读 · 0 评论 -
rmq-st算法<区间最大最小>(hdu 5875)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5875题意:给定一个数组,并给出[l,r],要求求出A(l)%A(l+1)%......%A(r)的值,当l==r时 直接等于A(l)题解:这道题的意思就是每次找到区间内最靠近l的且比当前ans小的进行取模,每次都这么取,知道到r,可以利用rmq算法先用o(nlogn)进行预处理,然后查找时的复原创 2016-09-16 11:47:18 · 391 阅读 · 0 评论 -
树状数组+dfs(hdu 5877)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5877题意:给定一棵树(带根),定义weak pair 为1.u为v的祖先,2.a(u)*a(v)题解:先用map对a进行离散化处理,因为总共10W的点,但数据表示范围很大,树状数组完全存不下,所以要离散化,然后找出根结点,从根结点遍历子节点,每次遍历的时候先统计之前加入的满足a(u)原创 2016-09-16 11:30:38 · 448 阅读 · 0 评论 -
离线记录+树状数组(hdu 5869 统计任意区间的不同gcd值)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5869题意:给定一个数组,给出范围[l,r],求在这范围内的不同gcd值得个数(连续下标)题解:用o(nlogA)计算出gcd值并进行记录,每次固定右值,枚举前一个得出的gcd值,记录左边的坐标和不同gcd值,然后用树状数组维护,具体见注释代码:#include#include#in原创 2016-09-12 23:26:17 · 593 阅读 · 0 评论 -
数位动态规划(acm hdu 3555 ,hdu 2089,hdu 4278)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3555题意:给定一个上界n,求在1-n中有多少个数含有49题解:因为数值太大,考虑用数位dp,按照每一位进行考虑,对于每一位i考虑dp[i][0]:在i位时不含49的数,dp[i][1]:在i位时不含49的数中含第i位为9的数(只要考虑第i+1为4就可以凑出49),dp[i][2]在i位时累计含原创 2016-08-04 09:33:17 · 433 阅读 · 0 评论 -
hdu 6012(离散+思路)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6012中文题意:这几天Lotus对培养盆栽很感兴趣,于是她想搭建一个温室来满足她的研究欲望。Lotus将所有的nnn株盆栽都放在新建的温室里,所以所有盆栽都处于完全相同的环境中。每一株盆栽都有一个最佳生长温度区间[l,r][l,r][l,r],在这个范围的温度下生长会生长得最好,但是不一定会原创 2017-02-03 22:37:13 · 568 阅读 · 0 评论 -
排序算法汇总二------交换类算法
冒泡排序:void BubbleSort(int *d,int length){ bool finish=false; for(int i=1;i<=length-1&&!finish;i++) { finish=true; for(int j=0;j<length-i;j++) { if(d[j原创 2017-02-01 22:59:15 · 363 阅读 · 0 评论 -
hdu 6011
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6011题意:给定n个字符,并给出每个字符的价值和数量,要求按顺序挑选出字符,组成字符串,要求得到价值最大的字符串的价值,价值的计算方法是第一个字符*1+第二个字符*2+......第i个字符*i。题解:先根据字符的价值堆字符进行排序,选择其中价值>0的字符先求和,这些一定会让价值提升,再在价值0,则原创 2017-01-26 22:21:35 · 603 阅读 · 0 评论 -
排序算法汇总三------选择类排序法
堆排序:void sift(int *d,int r,int length){ int now=d[r]; int i=r,j=2*i; bool finish=false; while(j<=length && !finish) { if(j<length && d[j]<d[j+1]) {j=j+1;} if(now原创 2017-02-01 23:02:33 · 554 阅读 · 0 评论 -
二维树状数组(poj 1195)
题目:http://poj.org/problem?id=1195题意:给出一个全0的矩阵,然后一些操作0 S:初始化矩阵,维数是S*S,值全为0,这个操作只有最开始出现一次1 X Y A:对于矩阵的X,Y坐标增加A2 L B R T:询问(L,B)到(R,T)区间内值的总和3:结束对这个矩阵的操作题解:利用二维树状数组,利用logn复杂度对原创 2017-02-07 22:21:07 · 563 阅读 · 0 评论 -
排序算法汇总一------插入类算法
直接插入算法:void InsSort(int *d,int length){ for(int i=1;i<length;i++) { int next=i-1; int nowdata=d[i]; while(nowdata>d[next]&&next>=0) { d[next+1]=d原创 2017-01-28 21:42:01 · 392 阅读 · 0 评论 -
AC自动机 (hdu acm 2222)
解释详见:http://www.cppblog.com/mythit/archive/2009/04/21/80633.html#include#include#include#include#include#include#define N 500010using namespace std;struct Node{ Node *fail;转载 2016-07-30 21:19:09 · 445 阅读 · 0 评论 -
动规<树形dp>+dfs (hdu 1520)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520题目解释:给定一些人的开心指数,要求开心指数总数和最大,只有当这个的上司不在时才能获得开心指数方法:动态规划+dfs,先找到没有上司的人,每个有可以被选也可以不被选,判断被选和不被选的最大值,逐级累加,被选时下属一定不会开心,不被选时下属可以被选也可以不被选代码:#include原创 2016-08-01 18:37:14 · 603 阅读 · 0 评论 -
动态规划(acm hdu 5791) 求公共子序列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5791题目解释:求公共子序列,给你连个串,可以不连续取,但必须按照顺序取子序列思路:类似于求最大公共子序列,如果a[i]=b[j],dp[i][j]=dp[i-1][i]+dp[i][j-1]+dp[i-1][j-1]-2dp[i-1][j-1]+1+dp[i-1][j-1] 即考虑原创 2016-08-03 22:17:45 · 413 阅读 · 0 评论 -
字符串编辑距离算法(hdu 4271 hdu 4323 hdu 3540)
关于字符串子序列的一些总结:http://www.cnblogs.com/zhangchaoyang/articles/2012070.html http://www.cnblogs.com/ziyi--caolu/p/3235229.html字符串编辑距离的意思就是给你两个串s1,s2,可以增原创 2016-08-08 21:16:13 · 625 阅读 · 0 评论 -
组合游戏(Nim 、反Nim)
详解见:http://wenku.baidu.com/link?url=H7XaRgujsbyWo3lQS5G2kXzzTgs-vS3-RvW3mVLEpKAjUgC94vPrBfkCXi4zxiavztczFR4-rk7X8h-ATZ_Xn_-5P0vRyV3f6LdZEeb6-YW http://www.doc88.com/p-15628486495.ht原创 2016-08-10 20:11:54 · 835 阅读 · 0 评论 -
2-sat(求最小字典序 hdu 1814)
2-sat:http://blog.youkuaiyun.com/swm8023/article/details/6952741,http://www.doc88.com/p-0012079707313.html2-sat 问题一般可以简化成每对(两个)元素中必须选一个,并且每对元素间有关系,比如两对元素中x1,x2和y1,y2中必须存在x1与y1矛盾,即满足选了x1必选y2,选了y1必选x2(因为每对必原创 2016-10-21 23:26:30 · 1240 阅读 · 0 评论 -
2-sat(强连通分量求法一 判断是否存在解法)
好博客链接:http://www.cnblogs.com/ambition/archive/2011/07/30/2-sat.html(内有ppt讲解、题集、论文)建图如上篇一样,主要不同是上篇利用暴力来求,但上篇可以保证按字典序最小进行输出,此处利用了比较好的算法,产生了o(m)的复杂度,应用于所有题,主要思路是利用了图的对称的原理,根据建图后可知,若存在强连通图,则其中选择了一个,其他点也原创 2016-10-23 21:57:55 · 1662 阅读 · 0 评论 -
2-sat(Tarjan算法+二分)
此博客是指一类2-sat的题目,需要通过二分,将答案不断精确化判断是否存在解来得出最临近临界值的解,具体见题。题目:http://acm.hdu.edu.cn/showproblem.php?pid=3622题意:一个人在玩游戏,这个游戏的规则是每次给两个点x1,y1,x2,y2,每次只能选择其中的一个点,然后以所有选择的点为圆心做同样大小的圆,这些圆可以相切,但不可以相交,求圆半径的原创 2016-10-23 22:21:39 · 879 阅读 · 0 评论 -
2-sat(任意可能性输出o(n))
该类问题算法的主要思路:1.建图(方法前面已说)2.tarjan算法、判断可行性、缩点、逆序建边(这个暂时没懂)3.拓扑排序染色4.输出具体模板见下:题目:http://poj.org/problem?id=3648题意:有一对新人结婚,邀请n对夫妇去参加婚礼。有一张很长的桌子,人只能坐在桌子的两边,还要 满足下面的要求:1.每对夫妇不能坐在同一侧 2.原创 2016-10-23 23:02:01 · 783 阅读 · 0 评论 -
KM算法(完备匹配下的最大权匹配)
KM算法求的是完备匹配下的最大权匹配: 在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接XiYj有权wij,求一种匹配使得所有wij的和最大。题目:http://acm.hdu.edu.cn/showproblem.php?pid=2255题意:分房子,对于n个人对n所房子有自己的最大承受价格,要求每个人分到一所房子,并且要求收入最大输入说明:输入n,代表n个人和n所房子原创 2016-10-24 09:22:16 · 2421 阅读 · 0 评论 -
Nim游戏
题目:hdu 5795题意:给定几个堆,并告诉你每个堆的石头数量,每次可以取一堆中的任意数量不能不取,并且可以分成3堆,求最后的赢家题解:由打表可知,sg[i]={i,i-1(i%8==0),i+1(i%8==7)},只要满足每堆sg 异或 和为0 就为必胜战略打表:代码:#include#include#include#include#include原创 2016-11-01 21:28:28 · 379 阅读 · 0 评论 -
最短路变形(hdu 5521)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5521题意:两个人分别从1和n的城市出发,要求在途中的一个城市相遇并且在该城市开会,求所需要的最短时间,不一定要同时到达,可以一个人在一所城市等着另一个人,要求输出所有满足最小时间的最终开会城市。输入说明:输入t表示有多少组样例 输入n,m表示有多少城市n,接下来m行输入,原创 2016-10-24 20:02:01 · 596 阅读 · 0 评论 -
贪心算法(hdu 4442 hdu 3183)
题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=4442题意:一个人去做运动,给定每项运动的初始等待时间和增长等待时间,一等完该运动的等待时间就相当于完成该项运动,即不考虑做运动的时间,求完成所有运动最短要多少时间。题解:贪心,考虑两种运动,初始等待时间为a1,a2,增长等待时间为b1,b2,只会发生两种情况,先做第一个运动和先做第原创 2016-08-24 20:17:20 · 437 阅读 · 0 评论 -
hdu 4283 (区间dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4283题目大意:以下思路转自(http://www.tuicool.com/articles/jyaQ7n)当中思路已经很明确有n个男屌丝事先按1,2,3,,,,,,n的顺序排好,每个人都有一个不开心值unhappy[i],如果第i个人第k个上台找对象,那么该屌丝男的不开心值就会为(k-1)原创 2016-11-03 12:13:37 · 639 阅读 · 0 评论 -
线段树+优化(hdu 5828 hdu 4027)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5828题目意思:对于一组数据,只能进行三种操作:1 对区间[l,r]中的每个数据进行加value操作,2 对区间[l,r]中的每个数据进行开方向下取整操作 3 对于区间[l,r]中的数据进行求和操作题目思路:开根号操作很快,对于2^64 最多8次会变成1,所以会存在很大一些数据相等的情况,对于加原创 2016-08-13 19:14:27 · 421 阅读 · 0 评论 -
强连通分量(强连通缩点(tarjan))+最小路径覆盖(匈牙利算法)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3861题意:王国划分区域,每个城市间的路是有方向的,要求每个区域满足:1.存在环路的必定在一个区域内。2.一个区域中的城市必定满足两两之间有一个可以到达另一个,求可以划分的区域数题解:对于第一个条件即是要求出图中的环路缩点,即用tarjan算法进行强连通分量的计算,对于第二个条件即是求最小路径覆盖原创 2016-10-17 22:40:20 · 602 阅读 · 0 评论 -
二分匹配续(hdu 1845,hdu 2063)
题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=1845题意:给一些无向的无环连线,求最大匹配题解:最大匹配,两种算法(hk算法和匈牙利算法)代码:匈牙利算法:#include#include#include#include#include#includeusing namespace std;const in原创 2016-10-10 23:52:29 · 363 阅读 · 0 评论 -
图论之二分匹配(好博客汇总)
二分匹配好博客:http://blog.youkuaiyun.com/xu3737284/article/details/8973720,https://www.byvoid.com/blog/hungaryhttp://blog.youkuaiyun.com/thundermrbird/article/details/52231639匈牙利算法可以解决的图的问题:(二分图)1.图的最小点覆盖数 = 图的原创 2016-10-08 22:27:48 · 473 阅读 · 0 评论 -
kmp算法(字符串匹配 next应用 hdu题目集合)
关于kmp算法的有关解释百度中有很多,可以自己查询更详细部分,其实最主要的就是next数组(以下题目我用的是on,因为hdu中直接用next变量或编译出错),当无法匹配时匹配字串跳转到前串中类似的位置(即是从无法匹配的前一个字符结束的类似字串)题目:http://acm.split.hdu.edu.cn/showproblem.php?pid=1686题意:最简单的kmp应用,模板原创 2016-08-20 08:43:03 · 1078 阅读 · 0 评论