算法
文章平均质量分 88
雪山上的小草
每天都是初学者
展开
-
乘法逆元
hdu5976我的博客==在一些题目中题目可能会要求一个乘积对MOD一个大数取余输出,给个例子hdu5976在这道题目中我们用到了前缀乘预处理,降低时间复杂度,但在预处理的时候,会发现可能乘积会爆long long,那么怎么办 这时我们这么干 f[i]=(f[i-1]*i)%MOD;而且在这道题中,我们最后要f[i]/i*k再取余,除法取余是不好取的,乘法的话就是(a*b)%MOD原创 2017-10-17 17:11:21 · 221 阅读 · 0 评论 -
C - Alyona and SpreadsheetDP
题目链接题意在一个矩阵中,询问l~r行是否有一列满足mp[i][j]>=mp[i-1][j](i属于l~r)即非递减序列,是输出Yes,否输出No用vector >储存矩阵mpdp[i][j]表示在j列从i行往上推dp[i][j]行满足非递减,即在j列行i-dp[i][j]到行i满足非递减序列,同样用vector >储存mx[i]表示在所有列中i-mx[i]最小的,即在所有列中在满原创 2017-10-17 17:58:09 · 185 阅读 · 0 评论 -
Super Jumping! Jumping! Jumping!杭电1087
DescriptionProblem DescriptionNowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very popular in HDU. Maybe you are a good boy, and know little about this game, so I int原创 2017-10-17 17:59:00 · 185 阅读 · 0 评论 -
hdu2159二维费用背包
题目连接背包九讲----二维费用背包问题二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(背包容量)。问怎样选择物品可以得到最大的价值。设这两种代价分别为代价1和代价2,第i件物品所需的两种代价分别为a[i]和b[i]。两种代价可付出的最大值(两种背包容量)分别为V和U。物品的价值为w[i]。算法费原创 2017-10-17 18:00:00 · 148 阅读 · 0 评论 -
ACboy needs your help hdu 分组背包问题
DescriptionACboy has N courses this term, and he plans to spend at most M days on study.Of course,the profit he will gain from different course depending on the days he spend on it.How to arrange原创 2017-10-17 18:00:38 · 287 阅读 · 0 评论 -
容斥原理汇总
对容斥原理的描述容斥原理是一种重要的组合数学方法,可以让你求解任意大小的集合,或者计算复合事件的概率。描述 容斥原理可以描述如下: 要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来,然后减去所有两个集合相交的部分,再加回所有三个集合相交的部分,再减去所有四个集合相交的部分,依此类推,一直计算到所有集合相交的部分。对于实际问题的应用转载 2017-10-17 17:30:28 · 384 阅读 · 0 评论 -
bone collector hdu 01背包问题
Problem DescriptionMany years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave原创 2017-10-17 18:01:18 · 277 阅读 · 0 评论 -
hdu1520树形dp入门
题目链接题意:要开派对,邀请了上司就不能邀请他的下属,邀请了下属就不能邀请他的上司,每个人有一个值,求邀请的人的总值最大第一行给出一个数n,代表有n个人。下面n行分别给出n个人的的值再下面n行每行给出L,K;K是L的上司以0 0结束一组输入树形dp:把每个人看成一个点,则该点有两个状态:邀请或没被邀请定义f[u][0]为节点没被邀请时的值;f[u][1]为节点被邀请时的原创 2017-10-17 18:02:07 · 188 阅读 · 0 评论 -
hdu1556Color the ball线段树区间更新
题目链接线段树区间更新更新一段区间,在更新区间的过程中,区间被分成几段,每一段的左右界限刚好是一个节点的tree[node].left和tree[node].right(如果不是继续分,直到是为止)区间几次更新后,进行查询,查询的过程就可以看成重走了更新的过程,所以第一种代码中ans+=A[k].count;ans就是最后答案 1 #include"stdio.h" 2 #i原创 2017-10-17 18:02:47 · 213 阅读 · 0 评论 -
DFS&BFS
1.深度优先遍历基本思想:从图中某顶点V0出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点;重复上述过程,直至图中所有顶点都被访问到为止。分析:在遍历图时,对图中每个顶点至多调用一次DFS函数,因为一旦某个顶点被标志成已被访问,就不再从它出发进行搜索。...原创 2017-10-17 18:07:50 · 353 阅读 · 0 评论 -
STL 优先队列的优先级
转载于http://blog.csdn.net/a_eagle/article/details/7371974 1 "font-size:24px;">struct cmp1 2 { 3 bool operator ()(int &a,int &b) 4 { 5 return a>b;//最小值优先 6 }转载 2017-10-17 18:05:48 · 154 阅读 · 0 评论 -
拓扑排序的原理及其实现
出处:http://blog.csdn.net/dm_vincent/article/details/7714519本文将从以下几个方面介绍拓扑排序:拓扑排序的定义和前置条件和离散数学中偏序/全序概念的联系典型实现算法Kahn算法基于DFS的算法解的唯一性问题实际例子 取材自以下材料:http://en.wikipedia.org/wiki/Top转载 2017-10-17 18:05:16 · 326 阅读 · 0 评论 -
hdu5726GCD
题目连接题意:给n个数,再来q个询问,每次给出l,r 输出gcd(a[l][,a[l+1],........,a[r])和区间最小公约数与该最小公约数相同的区间的个数求最小公约数gcd用倍增RMQ定义f[i][k]为从a[i]开始长度为2^k的区间的最小公约数那么f[i][k]=gcd(f[i][k-1],f[i+(1<<(k-1))][k-1]举个例子:n=5,a[5]={1,2,4...原创 2017-10-21 20:46:49 · 185 阅读 · 0 评论 -
树链剖分详解+模板
树链剖分是解决在树上进行插点问线,插线问点等一系列树上的问题假如现在给你一棵树,然后没两条边之间有一条权值,有一些操作,1:x---y之间的最大权值是多少,2:改变x---y之间的权值当前这样的操作有很多,如果直接用暴力的方法的话肯定不行,那么就要想一个好的方法,我们可以想一下能不能借助线段树解决,能不能想一种方法对树上的边进行编号,然后就变成区间了。那么我们就可以在线段树上进原创 2017-11-06 21:03:02 · 170 阅读 · 0 评论 -
poj1741树的分治
给你一棵TREE,以及这棵树上边的距离。问有多少对点它们两者间的距离小于等于K。我们知道一条路径要么过根结点,要么在一棵子树中,这启发了我们可以使用分治算法。只要先求出经过根结点的路径数,再递归的求经过所有子结点的路径数即可。下面来分析如何处理路径过根结点的情况。 我们先用一次搜索求出根的所有子结点到根的距离并将其放入一个数组中,复杂度O(n)。将这转载 2017-10-24 19:30:12 · 158 阅读 · 0 评论 -
最长上升非降子序列的长度动态规划
第一种dp从后往前:dp[i]表示以a[i]为起点的最长上升非降子序列的长度a[8]={10,2,2,4,12,23,34,2}dp[8]={4,6,5,4,3,2,1,1};代码实现: #include<bits/stdc++.h> using namespace std; void logest_increase_sub(const int*a,int s...原创 2017-10-17 17:57:33 · 156 阅读 · 0 评论 -
二分查找
二分查找法的实现和应用汇总 在学习算法的过程中,我们除了要了解某个算法的基本原理、实现方式,更重要的一个环节是利用big-O理论来分析算法的复杂度。在时间复杂度和空间复杂度之间,我们又会更注重时间复杂度。时间复杂度按优劣排差不多集中在:O(1), O(log n), O(n), O(n log n), O(n2), O(nk), O(2n)到目前位置,似乎我学到的算原创 2017-10-17 17:54:24 · 128 阅读 · 0 评论 -
hdu1116回溯N皇后问题
题目连接经过思考,不难发现:恰好N个皇后放在不同行不同列,那么是不是可以转换成N个皇后所在行分别确定(一人一行)的情况下对她们的所在列的枚举。也就是列的全排列生成问题,我们用c[x]表示x行皇后的列编号。而我们知道0~N-1的排列一共有N的阶乘,枚举量不会超过它。if(cur==n)//递归边界。只要走到这里,所有的皇后必然不冲突 tot++;根原创 2017-10-17 17:51:01 · 128 阅读 · 0 评论 -
欧拉函数值求解
欧拉函数简介:欧拉函数只是工具:提供1到N中与N互质的数 定义和简单性质欧拉函数在OI中是个非常重要的东西,不知道的话会吃大亏的.欧拉函数用希腊字母φ表示,φ(N)表示N的欧拉函数.对φ(N)的值,我们可以通俗地理解为小于N且与N互质的数的个数(包含1).欧拉函数的一些性质:1.对于素数p, φ(p)=p-1,对于对两个素数p,q φ(pq)=(p-1)*(q-1)欧拉函数是积性函数,但不是完全积...原创 2017-10-17 17:20:22 · 1046 阅读 · 0 评论 -
hdu1521排列问题
题目链接利用指数型母函数解决排列问题 1.口袋中有白球2个,红球3个,黄球1个,任取3个作为一个排列,总共有多少种排列? 类似地用指数型母函数解决 用(1+x/1!+x2/2!)表示取白球0个,1个或者2个 那么(1+x/1!+x2/2!)(1+x/1!+x2/2!+x3/3!)(1+x/1!)来表示所有的排列结果。 =1+3x+4x2+19x3/6+19x4/原创 2017-10-17 17:22:56 · 165 阅读 · 0 评论 -
hdu1085Holding Bin-Laden Captive!组合问题
题目连接题目意思:有单位价值为1 2 5的三种硬币,分别给出他们的数量,求用这些硬币不能组成的最小的价值解题思路:普通的母函数普通的母函数: 利用母函数的思想可以解决很多组合问题,下面举例说明: 1.口袋中有白球2个,红球3个,黄球1个,从袋中摸出3个球有几种取法? 和上面描述的例子类似,我们可以用次数代表球的个数,多项式的每一项前面的系数代表取法的种树。 可以原创 2017-10-17 17:23:36 · 157 阅读 · 0 评论 -
中国剩余定理证明
《孙子算经》里面的"物不知数"说的是这样的一个题目:一堆东西不知道具体数目,3个一数剩2个,5个一数剩3个,7个一数剩2个,问一共有多少个。书里面给了计算过程及答案:70*2 + 21*3 + 15*2 -105*2 = 23。它的计算思路如下:70是能被5或7整除的数字,但是除以3正好余1。21是能被3或7整除的数字,但是除以5正好余1。15是能被3或5整除的数字,但是除以7转载 2017-10-17 17:26:27 · 808 阅读 · 0 评论 -
UVA11549 计算机谜题(Floyd判圈算法)
1 #include 2 #include 3 #include 4 #include 5 #include 6 #includeset> 7 #include 8 using namespace std; 9 /*int next1(int n,int k)10 {11 stringstream ss;12 ss<<(long long)k*k;13原创 2017-10-17 17:32:14 · 167 阅读 · 0 评论 -
hdu5776sum
题目连接 抽屉原理:如果现在有3个苹果,放进2个抽屉,那么至少有一个抽屉里面会有两个苹果抽屉原理的运用现在假设有一个正整数序列a1,a2,a3,a4.....an,试证明我们一定能够找到一段连续的序列和,让这个和是n的倍数,该命题的证明就用到了抽屉原理我们可以先构造一个序列si=a1+a2+...ai然后分别对于si取模,如果其中有一个sk%n==0,那么a1+a2+...+a原创 2017-10-17 17:34:46 · 151 阅读 · 0 评论 -
尼姆博奕5754Life Winner Bo
给定一个n*m的矩阵,有四种棋子(国际象棋的王,王后,骑士,车)。起点在(1,1)先走到(n,m)获胜。分析:车是nim博弈。王后是威佐夫博弈。王和骑士写两个1000*1000的预处理即可。hdu5754Life Winner Bo 题目连接 1 #include 2 #include 3 #include 4 #include 5 using namespace std;原创 2017-10-17 17:37:59 · 149 阅读 · 0 评论 -
codeforces 776C Molly's Chemicals(连续子序列和为k的次方的个数)
题目链接题意:给出一个有n个数的序列,还有一个k,问在这个序列中有多少个子序列使得sum[l, r] = k^0,1,2,3……思路:sum[l, r] = k ^ t, 前缀和sum[r] = sum[l-1] + k^t。即如果后面有一段序列使得sum[l,r] = k^t,那么它可以转化为前缀和相减使得这一段大小为k^t,即sum[i] = sum[j] + k^t (1 那么对原创 2017-10-17 17:47:18 · 221 阅读 · 0 评论 -
模运算的基本性质
基本理论 基本概念给定一个正整数p,任意一个整数n,一定存在等式 n = kp + r ; 其中k、r是整数,且 0 ≤ r 对于正整数p和整数a,b,定义如下运算: 取模运算:a % p(或a mod p),表示a除以p的余数。 模p加法:(a + b) % p ,其结果是a+b算术和除以p的余数,也就是说,(a+b) = kp +r,则(a + b) % p原创 2017-10-17 17:45:58 · 12318 阅读 · 1 评论 -
尼姆博奕hdu1536Nim
sg函数打表的基础应用,第一道ac的sg函数打表题纪念下,直接上代码:hdu1536题目连接 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define maxn 100 7 using namespace std; 8 #define N 10000 9 int k,visit[N],f[N],sg原创 2017-10-17 17:43:15 · 125 阅读 · 0 评论 -
尼姆博奕HDU 5795 A Simple Nim(SG打表找规律)
SG打表找规律HDU 5795 题目连接 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 10000 8 int sg[MAXN],visit[MAXN]; 9 int getsg(int n)10 {11 int i,j原创 2017-10-17 17:42:24 · 207 阅读 · 0 评论 -
等式转换降低时间复杂度
ECJTU16级校赛 第四题:LB的公式Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 40 Accepted Submission(s) : 16Font: Times New Roman | Verdana原创 2017-10-17 17:47:57 · 306 阅读 · 0 评论 -
数据类型范围
unsigned int 0~4294967295 int 2147483648~2147483647unsigned long 0~4294967295 long 2147483648~2147483647long long的最大值:9223372036854775807long long的最小值:-9223372036854775808原创 2017-10-17 17:48:32 · 117 阅读 · 0 评论 -
质因数分解
1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 int main() 8 { 9 __int64 n,k,i,j;10 while(scanf("%I64d",&n)!=EOF)11 {12 k=sqrt(n);j=0;13原创 2017-10-17 17:49:26 · 150 阅读 · 0 评论 -
大数的阶乘
我们以1000为例,为了保存结果,需要先分析1000!有多大。大约为4*10的2567次方,因此可以用一个3000个的元素的数组f保存。为了方便进位,我们让f[0]保存各位,f[1]保存十位。。。。。。在输出时要忽略前导0。4!=24,那么从f[2]~f[1000]都为0需要忽略输出。 1 #include 2 #include 3 #include 4 #include 5 us原创 2017-10-17 17:49:59 · 127 阅读 · 0 评论 -
poj3140
题目连接题意: 给n个节点的带权树,删掉其中一边,就会变成两颗子树, 求删去某条边使得这这两颗子树的权值之差的绝对值最小。思路:dfs一遍,用ens[i]表示i的子树的权值和删去edge(to,fa),fa是to的父节点,to的子树权值和为ens[to],那么另外的权值和为sum-ens[to]答案ans=sum-ens[to]-ens[to]因为用dfs递推的缘故直原创 2017-10-24 21:24:06 · 276 阅读 · 0 评论