![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习
文章平均质量分 74
奔跑吧蚂蚁呀
这个作者很懒,什么都没留下…
展开
-
C++ string 使用指南(字符串处理必备)
在机试题目中,熟练使用string的各种方法远比直接使用char数组要高效、准确,希望这篇总结能给你一些帮助...原创 2020-03-16 23:21:10 · 155 阅读 · 0 评论 -
DP-树形DP-luogu2015-二叉苹果树
题目大意一棵二叉苹果树,边上结了苹果需要砍去一些边,求保留q条边时最多能保留多少苹果。(1<=n,q<=100)2 5 \ / 3 4 \ / 1问题分析题目保证了原始苹果树有分叉则必为二叉,且1为root注意输入时父子顺序是不确定的,所以需要做处理定义dpi,jdp_{i,j}dpi,j表示编号为i的子树在保留j条边的情况下获得的最大苹...原创 2019-11-25 17:01:59 · 134 阅读 · 0 评论 -
DP-状态压缩-luogu1879-玉米田
问题描述农夫有一块m∗*∗n的等分网格田地,他想在田地上种草。要求种草的格子田必须互不相连,现给出每块格子田各自的种植性质(能种(1)/不能种(0)),求种草方案总数。(1=<n,m<=12)问题分析问题的规模很小,这让人想到状态压缩。我们分别为每一排的情况做一个状态压缩,原因如下:对于单独的一块土地来说,只有种与不种两种选择。状态压缩一般直接用于一维情况。状态压缩总...原创 2019-11-25 17:01:32 · 149 阅读 · 0 评论 -
DP-树形DP-luogu2014-选课
题目大意学生要在n门课程中选m门课程,每门课程最多依赖于一门前置课程(可以有多门课程没有前置课程),问能获得的最大学分是多少。(1<=m<=n<300)问题分析显然,每门课程依赖至多一门,有课程可以没有依赖,所以这是一个多叉树森林。森林不太好处理,所以我们可以给森林加个虚拟根节点#0,让每棵树的根节点连到这个总结点上。问题即转化为在这个多叉树#0上选m门课程的最大学分,...原创 2019-11-25 16:57:55 · 157 阅读 · 0 评论 -
DP-树形DP-luogu1352-上司的舞会
题目大意求一棵树的最大独立集(1 <= n <= 6000)6000也太水了,一般都是1e6的规模问题分析问题抽象来说是最大独立集,具体在树中的体现题中已经明示。图G(V, E)的最大独立集S(V’, E’)具有如下性质:E’ = {},即最大独立集中的点两两之间没有边连接dp[i][?]为节点i在?情况下的最大独立集总权重,? = 0 和 ? = 1分别表示不取/选取这...原创 2019-11-25 16:54:24 · 114 阅读 · 0 评论 -
博弈论-SG函数的应用探究
本篇笔记是对大神 @龙杉老师 的两篇博客的一个整合,并且注入了我的部分理解。基础原理游戏图任何一个公平组合游戏都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个“有向图游戏”。游戏的一个终点就是有向游戏图的一个汇点,此时该点没有后继节点(无法进行下一步操作),处于该位置的玩家失败。N点和P点如果双方都按照最佳策略进行游戏,我们可以将游戏中的每...原创 2019-11-25 16:51:41 · 222 阅读 · 0 评论 -
C++STL常用内容使用总结
一、 set1. 容器特性二叉搜索树(排序树);有序;唯一;无法修改;高效查找、插入、删除set是按照特定顺序存储唯一元素的容器。在set中,元素的值也标识它(值本身是键,类型T),并且每个值必须是唯一的。集合中元素的值不能在容器中修改一次(元素总是常量),但可以从容器中插入或删除它们。在内部,集合中的元素总是按照其内部比较对象(类型为Compare)指示的特定严格弱排序标准进行排序。...原创 2019-11-25 16:46:21 · 116 阅读 · 0 评论 -
尺取法(双指针法)-POJ2566
题目大意给定一组包含n个整数的数列和k个询问,求取一个子串,使得该***连续子串***的***和的绝对值***最接近t注:暴力求解必定超时解题思路由于要求取一个连续子串的部分和,这让我们想到了记录前缀和sum的方式来在O(1)内求得任意子串的和。对于子串问题的处理,为了避免暴力双重循环,我们往往使用尺取法(双指针法),就像是在字符串匹配问题时的那样。当然,其他的方法(如DP)也经常用来...原创 2019-11-25 16:44:24 · 250 阅读 · 1 评论 -
二分查找-POJ1064-Cable Master
题目大意给定n条绳子的长度a[],如果从它们中切割出k条长度相同为ans的绳子,则ans最大能是多少(给定的绳子长和答案均保留两位小数)1<=n,k<=1e51<=a[i]<=1e6问题分析问题的本质寻找可行解的上界,这与二分搜索的思想高度契合:在有序的一组解中利用二分不断缩小可能解的范围,直至答案在可接受的精度内,可以寻找可行解的上界和下界。当解为浮点数时,...原创 2019-11-25 16:43:12 · 134 阅读 · 0 评论 -
二分查找-POJ3579-Median
题目大意给定一个长度为n的正整数序列a[],现有a[]中的所有元素任意两两做差,形成一个长度为Cn2C_n^2Cn2的序列b[],求出b[]的中位数。其中,1<=n<=1e5, 0<a[i]<1e9问题分析直接求出这些差值、排列、选中位数,显然会超时,其时间复杂度为O(n^2 log n^2) ,其中求值为O(n^2), 排列为O(m log m)。二分...原创 2019-11-25 16:42:30 · 153 阅读 · 0 评论 -
树状数组-luogu-P1972-HH的项链
题目大意给定一个长度为n的数列,给出m个询问,每个询问的内容为:统计指定闭区间[l,r]内不同元素的个数。1<n,m<=2e6问题分析问题规模巨大,暴力枚举显然会超时。因为操作中只有询问没有更新,所以可以使用离线算法。经验判断。。。这一道可以用树状数组解决的问题,但分析如下:这里我们需要求得任意区间内的不同元素个数,不同区间经常会存在在不同程度的重叠,直接...原创 2019-11-25 16:41:29 · 105 阅读 · 0 评论 -
树状数组-luogu4113-采花
题目大意花园里有c种花共计n朵,公主要在一个区间[l,r]内采花,仅当该颜色的花必须至少可以采到两朵,公主才会采它,问公主可以才多少种花。此外,题目会给出m个这样的闭区间用来询问。0<=c<n,m<=2e6题目分析显然,这个问题和之前的luogu1972-HH的项链是很类似的,本质是在求区间内不同元素的数目,只是仅当该元素至少出现两次时才计入统计。所以处理该问题的基本...原创 2019-11-25 16:40:44 · 120 阅读 · 0 评论 -
数论-常见定理的探究
关键词:威尔逊定理 欧拉定理 费马小定理 中国剩余定理威尔逊定理当且仅当p为素数时,(p - 1)! ≡ -1 (mod p)上式也可写作 (p - 1)! ≡ p-1 (mod p) 或 (p-1)! + 1 ≡ 0 (mod p)上式可作素数的判别条件,但复杂度较大,实用性较差。欧拉定理若n,a为正整数,且n,a互质,即gcd(a,n) = 1,则a^φ(n) ≡ ...原创 2019-11-25 16:39:26 · 188 阅读 · 0 评论 -
数论-线性同余方程的解法
一 拓展欧几里得方法1. 标准方程拓展欧几里得方法解决的标准问题是ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b)由于有2个未知数,却只有1个方程,所以方程的解并不唯一。通过欧几里得算法,我们得到了该方程的一对特解x0x_0x0和 y0y_0y0 ,由齐次方程ax+by=0ax+by=0ax+by=0可以得齐次通解{x=bgcd(a,b)y=−...原创 2019-11-25 16:36:38 · 1561 阅读 · 0 评论 -
数论-组合数的求法探究
组合数的简述组合数一般表示为CnmC_n^mCnm,也表示为(mn)\left( \begin{matrix}m \\n\\\end{matrix}\right)(mn)。在数论中,一般需要求的是组合数取模,即Cnm % pC_n^m \ \% \ pCnm % p,其中大多数时候p=1e9+7组合数的计算公式为Cnm=n!m!(n−m)!...原创 2019-11-25 16:28:58 · 264 阅读 · 0 评论 -
对线段树的理解与探究
什么是线段树线段树,是一种二叉搜索树。它将一段区间划分为若干单位区间,每一个节点都储存着一个区间。它功能强大,支持区间求和,区间最大值,区间修改,单点修改等操作。线段树的思想本质是一种分治思想。线段树的每一个节点都储存着一段区间[L…R]的信息,其中叶子节点L=R。它的大致思想是:将一段大区间平均地划分成2个小区间,每一个小区间都再平均分成2个更小区间……以此类推,直到每一个区间的L等于R(...原创 2019-11-25 16:25:35 · 117 阅读 · 0 评论 -
图论-网络流(最小费用最大流)的探究
对应OJ题目 洛谷模板题P3381问题分析首先应该弄清楚什么是最大网络流。在生产生活中,除了要考虑最大流之外,还会考虑实现最大流的代价(耗费),因为不同的规格(容量…)的管道的成本是不同的。现在我们想象假如我们有一个流量网络,现在每个边除了流量,现在还有一个单位费用,这条边的费用相当于它的单位费用乘上它的流量,我们要保持最大流的同时,还要保持边权最小,这就是最小费用最大流问题。因为在一个...原创 2019-11-25 16:23:16 · 761 阅读 · 1 评论 -
图论-图的存储(邻接表)探究
一. vector形式1. 特性分析优点:代码简单,均摊时间代价也不是很大缺点:性能确实没那么高,当考虑边的权值是还需另外定义struct,遍历也不再方便适用情形:只考虑连通性的稀疏图2. 代码实现#include <vector>using namespace std;const int maxn=2e4+10;int n,m;vector<int&...原创 2019-11-25 16:22:11 · 118 阅读 · 0 评论 -
图论-Floyd+分治-计蒜客A1108
题目链接:https://nanti.jisuanke.com/t/A1108 (百度地图的实时路况)问题描述给定 n 个点的有向图。定义 d(u, v, w) 为从 u 到 w 严格不经过v 的最短路,若路径不存在,则 d(u, v, w) = -1,求所有d(u,v,w)的和。(n<=300,1<=u,v,w<=n)问题分析Floyd算法是将每个点k依次加入...原创 2019-11-25 16:20:52 · 354 阅读 · 0 评论 -
图论-Dijkstra+线段树-bzoj3073-Journeys
权值线段树优化建图问题描述DescriptionSeter建造了一个很大的星球,他准备建造N个国家和无数双向道路。N个国家很快建造好了,用1…N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建造道路:(a,b),(c,d)表示,对于任意两个国家x,y,如果a<=x<=b,c<=y<=d,那么在xy之间建造一条道路。Seter保证一条道...原创 2019-11-25 16:18:43 · 139 阅读 · 0 评论 -
图论-最短路径算法的探究
Floyd算法要点分析Floyd算法的核心思想是动态规划,对于i、j的距离,使用第k个点进行优化。DP状态$dp_{k,i,j}$为当中间点仅从1…k选取时i和j的最短路径DP转移为$dp_{k,i,j}=min\{dp_{k-1,i,j},dp_{k-1,i,k}+dp_{k-1,k,j}\}$对对一维加上滚动数组的优化,就成了熟知的Floyd。实现代码int graph[N]...原创 2019-11-25 16:16:29 · 131 阅读 · 0 评论