- 博客(122)
- 收藏
- 关注
原创 区间DP专题
LIGHTOJ1422这个题可以从两种角度来考虑,第一种是根据题意中的套衣服设定,如果出现一件衣服是之前穿过的,那么枚举讨论新的同款衣服需不需要额外穿一次。第二种是根据刷区间设定(HDU2476),如果现在出现了一个之前出现过的的颜色,那么讨论这个颜色是否可以从之前直接刷过来。(实际上两种设定一样)那么根据设定可以确定这样的状态转移:对于任意一件衣服,如果在此之前的区间(这个区间为i-&g...
2019-10-19 10:28:38 180
原创 数位DP专题
CF55D这个题的核心要素是:某个数n被它的所有非零数位整除的同时,也是整除了所有非零数位的最小公倍数。所以在分析数位的同时需要照顾已经分析的所有非零数位的最小公倍数,和这些数位组成的这个数取余它的模。所以dfs过程就有了三维数据:当前数位,余数,最小公倍数。然而余数和最小公倍数可能很大,在记忆化过程中较难实现,所以需要优化一下。可以发现1~9的最小公倍数为2520,如果一个数被2520整...
2019-10-13 20:31:29 263
原创 Kuangbin 第12套 基础DP部分题题解
1.Max sum plus plus本题是一个M段子段的最大字段和的问题,也就是把一个数列分成M小节使得每小节总和最大。关于这个问题先从最大子段和(单段)开始说起。最大子段和(子段是连续子数列)的求解意味着对于数列中一个元素,要么归于前面已经成型的一个子段,要么自成一派创立新的子段。这个抉择取决于这两个的权值的大小,如果成型的子段的和较大,那么就让它加入前面的子段,否则就自己作为新子段的...
2019-10-10 21:35:24 879
原创 专题训练集-最短路
POJ2253本题的意思是求出点1到点2之间所有路间,每条路的最大边的最小值。所以根据这个只需要对每两个点进行松弛操作,然后在松弛操作中进行最大边选取即可。至于为什么在这里选择了floyd算法,那是因为这两个点之间存在极其多的路径可供选择,而这里需要讨论每一条路的最大边,然后综合求最小值,所以这个很明显不能用普通的最短路算法来实现。这就需要floyd里这种类似动态规划的思想来解决是比较好的...
2019-10-06 19:14:54 137
原创 UPC 个人训练赛2部分题题解
A 招待本题是一个三进制下的模拟题。为什么判定这是三进制?是因为砝码的重量一定是3的幂次。假如砝码的重量都是2的幂次,那么根据二进制的相关知识可以知道110=4+2+0=6,也就是6可以由一个2单位的砝码和一个4单位的砝码称量。换成三进制的的话,对于数字13,三进制表示是111,也就是1+3+9,重量为13的物体可以由1,3,9这三个重量的砝码称量。但是三进制表达式中含有2这个数字,题给的...
2019-09-27 13:01:10 235
原创 UPC 个人训练赛1部分题题解
A 斗地主由于数据范围不是多大,所以可以直接用搜索解决,因为这里是一个类似在二叉搜索树上求最短路的问题,故这里推荐bfs。既然要用bfs,就需要像遍历图一样明确方向。求解这个问题需要三个人的得分情况,也就是需要讨论三个维度的方向问题,而且在遍历中需要标记数组来避免死循环,不巧的是这个数据范围(-300~300)不能让你开三维数组。但是题给了另外一个条件:a+b+c=0,所以只要求出两个人的...
2019-09-22 09:44:54 254
原创 裴蜀定理(针对于多元一次不定方程的求解)
裴蜀定理的基本内容是】若a,b是整数,且gcd(a,b)=d,那么对于任意的整数x,y,ax+by都一定是d的倍数,特别地,一定存在整数x,y,使ax+by=d成立。如何证明这个定理呢?假设c是ax+by的最小正整数解,也即是ax+by=c,d=(a,b) 根据最大公约数的性质及同余方程的性质,可以知道:d|a,d|b,d|(ax+by) 假设r是a%c的余数,t是a/c的整除...
2019-09-18 21:28:05 919
原创 2019 沈阳网络赛 Honk's pool(浩克的池子)(二分答案)
As we all know, Honk hasnnpools, numbered as11~nn. There isa_iailiters water in theii-th pool. Every day, Honk will perform the following operations in sequence.我们都知道,浩克有n个池子,以1~n标号,在第i个池子...
2019-09-15 10:58:16 321
原创 2019 徐州网络赛 XKC's basketball team(蔡徐坤的篮球队)(线段树维护区间最值)
XKC , the captain of the basketball team , is directing a train ofnnteam members. He makes all members stand in a row , and numbers them1 \cdots n1⋯nfrom left to right.蔡徐坤,是一个篮球队的队长,正在指导对n个队员的训练...
2019-09-10 18:20:35 632
原创 Fire-Fighting Hero 与 so easy (两个送命题)(附加源点)(并查集)
Fire-Fighting Hero本题是多源最短路(没有固定汇点),而运行一定数量以上的最短路算法会直接TLE,本题数据范围也不允许使用FLOYD,所以只好加一个附加源点。附加源点是干什么用的?可以把它看成一个专门通向任意源点的传送门。这个传送门与任意起点都相连,其边的权值为0,从它可以扩展到所有源点,从这些源点开始寻找最短路也就与每一次挑一个源点进行一次最短路搜寻在效果上是等效的,但是...
2019-09-09 18:15:16 218
原创 普通线段树模板,分块模板,树状数组模板存档
目录线段树(具备基本功能:区间查询,区间修改,单点查询,单点修改)线段树(维护区间最值并查询)分块算法(具备基本功能)树状数组(具备基本功能)线段树(具备基本功能:区间查询,区间修改,单点查询,单点修改)#include<pch.h>#include <iostream>#include <cstdio>#include <...
2019-09-07 01:47:01 151
原创 简略介绍可持久化线段树
可持久化线段树是指保存了历史操作版本的线段树,就好比一个软件更新,它的历代版本都可以下载,这对于求解区间第K位的问题很有帮助。因为可持久化线段树是把每个数据通过离散化的方式保存,而且在过程中保存的是插入不同的数后的整棵树的状态,而两个状态之间作差恰好就是某个区间的范围,再通过单点查询即可找到答案。所谓离散化,就是以相对位置代替原数的值来存储这个数。比如成绩表,一个人对应一个成绩,同时也对应...
2019-09-02 18:21:36 151
原创 JOYOI 最大子序和(单调队列)
输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大。例如1,-3,5,1,-2,3当m=4时,S=5+1-2+3=7当m=2或m=3时,S=5+1=6本题是一个单调队列的问题,准确来说是前缀和+单调队列。为啥要单调队列呢?我们来康康这个问题的意思:从一个序列里找一个子序列的和使得它是所有子序列和里边最大的那个。既然提到了区间和,那就用前缀和来简...
2019-08-30 23:15:38 281
原创 POJ 2823 silding window(滑动窗口)(单调队列)
An array of sizen≤ 106is given to you. There is a sliding window of sizekwhich is moving from the very left of the array to the very right. You can only see theknumbers in the window. Each time...
2019-08-30 20:54:46 178
原创 最短Hamilton路径与状压DP
最短Hamilton路径的意思是遍历一张图,每个节点不重不漏的走过一次(不能多),这样一种走法的最短路径。这样的一种问题可以通过状态压缩动态规划来实现,其核心思想是以二进制形式枚举各个点是否被走过的状态,通过这些子状态推得答案。如何设计这个方案呢?可以设DP数组第一维指代当前点的经历情况(这是二进制数字的十进制形式,比如0011就代表走过3 4两个点,在第一维以3来表现。)第二维表示当前在...
2019-08-27 22:41:41 322
原创 GCPC2017 部分题题解
C joyrideIt is another wonderful sunny day in July – and you decided to spend your day together with your little daughter Joy. Since she really likes the fairy-park in the next town, you decided to ...
2019-08-26 21:43:00 498
原创 HDU1559 最大子矩阵和(二维前缀和模板)
二维前缀和可以实现一个矩形区域内的求和问题,而本题恰好就是要求一个矩阵内部的和的最大值,所以直接套用二维前缀和并在结尾进行最大值更新即可。#include<pch.h>#include <iostream>#include <cstdio>#include <bits/stdc++.h>#include <queue>#i...
2019-08-26 21:42:18 341
原创 UPC Participate in E-sports(参加电子竞技)(Biginteger的平方根:二分或牛顿迭代法)
Jessie and Justin want to participate in e-sports. E-sports contain many games, but they don't know which one to choose, so they use a way to make decisions.Je和Ju想去参加电子竞技,电竞有很多项目,但是他们不知道选哪一个,所以他们用一种...
2019-08-21 11:21:51 244
原创 拓扑排序及其模板
拓扑排序是一种针对于有向无环图中顶点的排序算法,以入度为基准(一个顶点被多少条边指向的边的数值即为入度),从小到大一一挑选并排列成线性结果。模板:(利用优先队列默认输出字典序最小结果)#include<pch.h>#include <iostream>#include <cstdio>#include <bits/stdc++.h>...
2019-08-21 00:35:12 144
原创 中国剩余定理(普通)模板+拓展中国剩余定理模板
本算法的步骤如下:首先求得各个除数的最小公倍数 把最小公倍数除以当前除数,意为创造一个除了本除数意外其他所有除数都可以整除的数字。然后用这个数字去求得它在同余于当前除数的环境下的逆元,这个数字乘以逆元就相当于在此除数环境下同余于1。 最终答案加上上面的扩大余数倍的乘积结果,再进行取余LCM(要求最小整数解)import java.util.*;import java.math.*;...
2019-08-17 23:35:13 202
原创 CT1428 题解(待更)
A 机器人军团典型的最长上升子序列问题,只不过这里是不下降子序列,与前者只有一个符号的区别//#include<pch.h>#include <iostream>#include <cstdio>#include <bits/stdc++.h>#include<queue>#include <map>#i...
2019-08-15 23:40:10 171
原创 最长上升子序列模板(JAVA,C++通用模板)
1.动态规划(平方级复杂度)import java.util.*;import java.math.*;import java.io.*;import java.text.*;public class Main{ static int a[]=new int[5000]; static int status[]=new int[50000]; public ...
2019-08-15 23:33:30 152
原创 Miller Rabin质数判定模板(2)
首先介绍一个相关的引理。和总是得到1,称这两个数为1的“平凡平方根”。当p是素数且p>2时,不存在的“非平凡平方根”。为了证明该引理,我们假设x是的平方根,于是有[1]推出p|(x+1)(x-1),也就是说,p|x+1或p|x-1。现在假设n是一个奇素数,且 n>2。于是n-1是一个偶数,可以被表示为...
2019-08-14 01:14:28 208
原创 UPC 路(最短路方面+路径回溯)
题目描述Farmer John 热衷于散步,每天早上他都要从 1 号仓库走到 n 号仓库。 Farmer John 家的 n 个仓库被 m 条双向道路连通起来,每条道路有一个长度 w。而Farmer John 又不喜欢走路,所以他走的是从 1 号仓库到 n 号仓库的最短路。但是 Farmer 的奶牛们总想搞点事情,他们计划着把 m 条道路的其中一条变成原来长度的 2 倍,使得 Farmer ...
2019-08-14 01:14:23 137
原创 ICPC 2018焦作赛区网络赛部分题解
transport ship(运输船)题目描述There are N different kinds of transport ships on the port. The i^th kind of ship can carry the weight of V[i] and the number of the ithkind of ship is 2C[i]-1. How many di...
2019-08-14 01:14:12 173
原创 ct1807部分题的题解
Wang Haiyang is a strong and optimistic Chinese youngster. Although born and brought up in the northern inland city Harbin, he has deep love and yearns for the boundless oceans. After graduation, he c...
2019-08-14 01:14:07 411
原创 Newcoder 被三整除的子序列(基本状态转移)
给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除答案对1e9+7取模被三整除即各位数的和可以被三整除。显然每选择一个数所造成的结果都会从原来已知的结果加上一些影响而得到,这里可以找几个数发现规律:1563:当只有1的时候不存在被3整除的情况,只有15的时候存在一种被3整除的情况(15),只有156的时候存在三种被三整除的情况(6,15,156),1563的时候存在...
2019-08-13 20:01:59 418
原创 树形DP初步与区间DP初步(不定更)
树形DP就是在数据树上进行状态转移的算法。一般这个状态转移数组会存在三个维度:当前是index号节点为根节点的子树,已经选择了N个节点,这个节点选不选(或者其他)。一般套路有:链式前向星或者向量数组建树 在树上进行DFS例题:P1352 没有上司的舞会本题就是一个很典型的树状结构上跑DP的例子。由题意可知:对于每一个节点的状态都需要知道它当前的编号和当前节点有没有被选上,也就是...
2019-08-12 23:11:36 177
原创 JAVA快速排序+归并排序模板
快速排序import java.util.*;import java.math.*;import java.io.*;import java.text.*;public class Main{ public static void Partition(int array[], int lower, int upper) { int mid=ar...
2019-08-11 19:43:54 196
原创 差分约束系统相关练习题
POJ1716An integer interval [a,b], a < b, is a set of all consecutive integers beginning with a and ending with b.Write a program that: finds the minimal number of elements in a set containing a...
2019-08-10 10:35:26 186
原创 UPC packing(打包)(组合背包)
It was bound to happen. Modernisation has reached the North Pole. Faced with escalating costs for feeding Santa Claus and the reindeer, and serious difficulties with security, NP Management has deci...
2019-08-10 10:33:31 225
原创 KMP,字典树与AC自动机,哈希算法,01字典树
KMP中的一个重要思想与AC自动机非常相似,就是失配指针。在kmp算法中指匹配失败后该返回到字符串的哪个位置,也就是俗称的特定位置的复活出生点。KMP模板如下://#include<pch.h>#include <iostream>#include <cstdio>#include <bits/stdc++.h>#include&l...
2019-08-09 23:16:42 184
原创 CT 1459 字符串算法
A 子串查找哈希加密函数:hash[i]=hash[i−1]∗p+idx(s[i])(idx指的是待加密字符串,p是质数)哈希加密函数(带取余):hash[i]=(hash[i−1])∗p+idx(s[i])%mod(p和mod都是质数)查询某段的哈希值:hash=hash[r]−hash[l−1]∗p^(r−l+1) (因为哈希加密时会多次乘p,要在区间左端点乘上相应“长度...
2019-08-09 00:21:56 113
原创 差分约束系统的相关事宜
差分约束系统针对于将不等式方程组转化为图论中最短路或者最长路问题,可以看做是各种问题与图论之间相互联系的桥梁。比如在此图中求解x3-x0的最大值,就相当于求x0->x3的最短路,形如a-b<=c的式子可以转化为a<=c+b-->dis[a]<=w(a,b)+dis[b]这样类似于最短路或最长路的表达式。用这些不等式建边的注意事项:不等式一定是减式(因...
2019-08-06 00:07:59 131
原创 RMQ模板
RMQ是一种专注于区间最值查询的算法。此算法以状态转移方程为核心,用一个二维数组[i,j]表示从i开始向右2^j-1个元素中的最值是多少(这包含2^j个元素)。本算法一般包含两个核心模块:1.建立信息表(ST表)。建立信息表需要用到一个状态转移方程:dp[i][j]=min/max(dp[i][j-1],dp[i+(1<<(j-1)][j-1]),这是什么意思呢?上面有说到dp[i...
2019-08-05 21:19:18 166
原创 数据结构-(二叉)堆的模板(可用功能:建堆,删除最值,插入元素)
堆是一种特殊的数据结构,它有两个特性:底层实现结构是完全二叉树(定义:当且仅当一棵树每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。) 如果是大根堆,那么保证每个节点的值都比父节点小,如果是小根堆,那么保证每个节点的值都比父节点大建堆就是把一堆数据塞进堆里,因为数据很可能是无序的,所以说为了把一堆杂乱无章的数据整合成上面的样子,就需要一些特别的操作,有两种...
2019-08-04 22:29:38 130
原创 HDU 6608 FansBlog(粉丝博客)(MillerRabin算法+威尔逊算法)
Farmer John keeps a website called ‘FansBlog’ .Everyday , there are many people visited this blog.One day, he find the visits has reached P , which is a prime number.He thinks it is a interesting fact...
2019-08-03 02:01:19 141
原创 UPC 桐桐的爬山计划
本题的状态量有两个,一个是攀爬次数,一个是当前位置。所以开一个二维数组,数组值为所记录的高度。状态转移则由当前高度加减攀爬高度所对应的数组值实现,也就是dp[i][j]=min(dp[i][j-a[i]](代表本次攀爬是向上的),dp[i][j]+a[i])代表本题攀爬是向下的。不过在枚举当前位置的时候可能会出现上下越界问题和位置存在性问题(就是说那几次攀爬可不可能到达某些位置),都需要一一判断。...
2019-08-01 23:38:55 772
原创 UPC Fstring字符串(基本状态转移)
既然不能存在ABC三个字母连续出现的情况,那么假定每一个字母都需要由在他之前的两个字母决定,那么就会有两种情况:前两个字母相等和前两个字母不等。如果前两个字母相等,那么那两个字母之前的组合可能性都是一样的,后一个字母的状态只相当于复制了前一个状态,比如A到AA,B到BB,C到CC,都是三种情况,那么第三个字母是任意情况。如果前两个字母不等,那么就需要后一个字母的状态减去前一个字母的状态(减...
2019-07-31 23:33:20 131
原创 UPC 攀登宝塔(基本状态转移)
第一个基本状态是每个台阶是以什么样的跨度转移过来的(一个格子之前还是两个格子之前),第二个基本状态就是主角本身是否处于灵力CD的状态。所以对于DP数组需要开二维,一维记录灵力状态,另一维记录跨度范围。//#include<pch.h>#include <iostream>#include <cstdio>#include <bits/std...
2019-07-31 23:27:25 173
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人