- 博客(94)
- 资源 (2)
- 收藏
- 关注
原创 DP求最小花费 - 九度OJ 1086
DP求最小花费,可以用最短路的思想来做。不过最短路是二维矩阵,这里我们做的是一维。题目1086:最小花费题意:给你n个点,标号从1 - n,再给出n-1条边,代表从1到2...n之间的距离。三种车票,长度为L1,L2,L3,价格为C1,C2,C3,问你从坐标a到b最少的花费(在坐标点换乘,超出的距离也只能在到达的最近点换乘)。数据范围:0这就相当于最短路,用f[ ]数组记录,一
2017-08-06 23:06:39
833
原创 背包与贪心
背包问题最经典的就是01背包。n个物品,有体积 w 和价值 v 两种属性,选择一部分填充容量为 m 的背包(可以不填满),求能获得的最大价值。其实分析下来,动态转移方程就是 f[i][v]=max{f[i-1][v], f[i-1][v-c[i]]+w[i]} ,优化后就是 f[v]=max{f[v], f[v-c[i]]+w[i]} (第二重for循环从m -> v[i],为了不更新i
2017-08-06 23:00:45
463
原创 01背包查找路径
做01背包,我们能知道最后的结果,若果求路径,我们可以根据状态转移方程逆推。看一个百度之星2017年的题度度熊的午饭时光Problem Description度度熊最期待每天的午饭时光,因为早饭菜品清淡,晚饭减肥不敢吃太多(胖纸的忧伤T.T)。百度食堂的午餐超级丰富,祖国各大菜系应有尽有,度度熊在每个窗口都有爱吃的菜品,而且他还为喜爱的菜品打了分,吃货的情怀呀(>.
2017-08-06 23:00:08
474
原创 完全背包+最值问题
在解决完全背包问题时,通常会遇到两种问题,一种是恰好将背包装满,一种是不要求恰好装满。是否恰好装满只是初始化的会有区别。恰好装满 如果要求恰好装满背包,那么在初始化时除了f[0]为0,其它f[1..V]均设为-∞(求最小值设为∞),这样就可以保证最终得到的f[N]是一种恰好装满背包的最优解。不一定恰好装满 如果并没有要求必须把背包装满,而是只希望价格尽量大,初始化时应该将f[0..
2017-08-06 10:12:59
932
原创 处理技巧+DFS | 计算字符串种类
336. Equivalent Passwords 题目大意:给你n个仅由0~9组成的字符串作为密码(1 ≤ N ≤ 100,000),每个字符串长度<=5,两个字符串A,B如果长度相同且对于每个位置i ,|A[i] - B[i]|(注意绝对值)都相同,那么这两个字符串就是等价的,问你至多多少次 能找到正确密码。简单说就是n个字符串有多少种? 分析:如果暴力匹配,最坏的情况是...
2017-07-30 17:39:16
529
转载 数学+矩阵快速幂 | 打表找规律+数学归纳
Funny FunctionTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) 题意:通过给定的函数计算 F(m,1),结果模上 1e9+7 题解:(转自RedPolya)F1,1=F1,2=1F1,i=F1,i−...
2017-07-28 17:32:44
398
原创 贪心 - 端点变化的连续区间求最值
Maximum Sequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) 题意:给两个长度为n的序列a, b,现要求max(sum(a[n + 1] + … + a[2n])),其中a[i] = max(a[b[k]] … a[i ...
2017-07-28 16:03:03
645
转载 康托展开
康托展开 康托展开的公式是 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! 其中,ai为当前未出现的元素中是排在第几个(从0开始)。 这个公式可能看着让人头大,最好举个例子来说明一下。例如,有一个数组 s = ["A", "B", "C", "D"],它的一个排列 s1 = ["D", "B", "A", "C"],现在要
2017-07-11 21:00:29
263
原创 codeforce #420
C. Okabe and Boxestime limit per test3 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputOkabe and Super Hacker Daru are stacking and remov
2017-06-26 02:04:29
687
原创 容斥定理 | 初步
容斥定理:http://www.cppblog.com/vici/archive/2011/09/05/155103.html玲珑杯 1138 - 震惊,99%+的中国人都会算错的问题DESCRIPTION众所周知zhu是一个大厨,zhu一直有自己独特的咸鱼制作技巧.tang是一个咸鱼供应商,他告诉zhu在他那里面有N条咸鱼(标号从1到N)可以被用来
2017-06-24 21:50:51
424
原创 玲珑杯 1137 - Sin your life
1137 - Sin your life给一个正整数n,求下列表达式的最大值:(sin(x)+sin(y)+sin(z))[x+y+z=n][x≥1][y≥1][z≥1],这里的x,y,z皆为整数已知 x+y=m,则sinx+siny=sin(m-y)+sinymax=sqrt( sin(m) * sin(m) + (1-cos(m) * (1-cos(m) )
2017-06-24 16:28:09
390
转载 异或 问题
问题定义:有2n+1个数,只有一个单着,别的都是成对的,找出这个单着的数。比如:2 1 3 2 1。3是答案。思路一:暴力搜索——每个数都和其他数比较,找不到相同的,就得到了结果。时间复杂度为o(n2)思路二:排序搜索——先给序列排个序,之后从前往后一对一对的找,直到不是成对的为止。时间复杂度,怎么也得o(nlgn)思路三:异或计算,一趟搞定。时间复杂度o(n)直接看思路三:原
2017-06-23 22:22:42
1822
原创 约瑟夫环问题
约瑟夫环问题:一圈共有N个人,开始报数,报到M的人自杀,然后重新开始报数,问最后自杀的人是谁?如图:内环表示人排列的环,外环表示自杀顺序;上面N=41,M=3。 (图转自KangRoger的博客)问题链接:CDOJ 525最容易想到的思路是模拟,时间复杂度为(n*m);#include #include #include using namespace
2017-06-18 11:17:23
717
转载 一个大牛的工作体验
转自前CSDN第一名:首先想谈一谈自己工作时的几点感触: 1)认真规划自己的职业方向,选择一个行业时,是否真正对其有兴趣,与你的理想是否合拍?请慎重安排自己的职业道路,而选中了一条路,就要认真做下去,只有对一个行业有了深入地了解,你才有资格得到你希望的薪水。 2)求职时的简历以简单明晰为好,招聘官其实最不喜欢看到的就是厚厚一摞,夹着大堆证书和像片的简历了,能简单明了的用一至两页
2017-06-12 18:32:33
391
原创 矩阵快速幂
题目描述存在如下递推式:F(n+1)=A1*F(n)+A2*F(n-1)+...+An*F(1)求第K项的值对1000000007取模的结果输入单组测试数据第一行输入两个整数 n , k (1第二行输入 n 个整数 F(1) F(2) ... F(n)第三行输入 n 个整数A1 A2 ... An 输出输出一个
2017-06-12 16:34:51
326
转载 RMQ求区间最值
RMQ算法,是一个快速求区间最值的离线算法,预处理时间复杂度O(n*log(n)),查询O(1),所以是一个很快速的算法,当然这个问题用线段树同样能够解决。问题:给出n个数ai,让你快速查询某个区间的的最值。(一)首先是预处理,用动态规划(DP)解决。设A[i]是要求区间最值的数列,F[i, j]表示从第i个数起连续2^j个数中的最大值。(DP的状态)
2017-06-04 21:42:24
342
原创 AC自动机入门 - HDU3065 病毒侵袭持续中
AC自动机的模板题。HDU3065 病毒侵袭持续中题意:给定n个字符串和一段文本,统计每个字符串在文本中分别出现的次数。注意点:这里输入单词的时候给每个单词分布一个id,然后在统计次数的时候根据id增加数组的次数就可以了。(这里用kuangbin大神的模板)code:#include #include #include #include using namespa
2017-06-01 22:24:12
366
转载 AC自动机
首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有模式树(字典树)Trie和KMP模式匹配算法的基础知识。AC自动机算法分为3步:构造一棵Trie树,构造失败指针和模式匹配过程。
2017-06-01 19:34:11
216
原创 Normal - 51Nod 平均数
1711 平均数 基准时间限制:4 秒 空间限制:131072 KB LYK有一个长度为n的序列a。他最近在研究平均数。他甚至想知道所有区间的平均数,但是区间数目实在太多了。为了方便起见,你只要告诉他所有区间(n*(n+1)/2个区间)中第k大的平均数就行了。Input第一行两个数n,k(1<=n<=100000,1<=k<=n*(n+...
2017-05-25 13:34:49
470
原创 入门题 - HDU1556 Color the ball
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 19952 Accepted Submission(s): 9946 Problem DescriptionN个气球排成一...
2017-05-24 12:21:44
217
原创 CSU 1933-购买饮料
1933: 购买饮料 Time Limit: 1 Sec Description 小明家门口有一个卖饮料的自动售货机,小明经常在那里买饮料。每种饮料有一个流行度,表示它在市场上流行的程度,为了显示自己的与众不同,小明从来不买流行度大于t的饮料。售货机上有三种操作:1 在货架上添加一种流行度为x的饮料,并以j作为该饮料的编号,j表示该饮料是第j个被添加的饮料(j从1开始计...
2017-05-24 09:40:08
583
原创 基础DP - 循环数组最大子段和
1050 循环数组最大子段和N个整数组成的循环序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的连续的子段和的最大值(循环序列是指n个数围成一个圈,因此需要考虑a[n-1],a[n],a[1],a[2]这样的序列)。当所给的整数均为负数时和为0。例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4,13。和为20。I
2017-05-22 12:08:37
327
原创 数位DP - 数字1的数量
1009 数字1的数量基准时间限制:1 秒 空间限制:131072 KB 分值: 5难度:1级算法题给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。Input输入N(1 Output输出包含1的个数Input
2017-05-20 12:03:21
1332
原创 基础DP - 编辑距离
1183 编辑距离基准时间限制:1 秒 空间限制:131072 KB 分值: 0难度:基础题编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sitting:si
2017-05-19 18:33:10
314
原创 基础DP - 正整数分组问题
1007 正整数分组基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题将一堆正整数分为2组,要求2组的和相差最小。例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1,是所有方案中相差最少的。Input第1行:一个数N,N为正整数的数量。第2 - N+1行,N个正整数。(N
2017-05-19 12:59:55
394
原创 入门 - 最长公共子序列 Lcs
1006 最长公共子序列Lcs基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。比如两个串为:abcicbaabdkscabab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。Inp
2017-05-17 13:06:18
225
原创 KMP经典习题
KMP 算法经典题目:pku2406 Power Stringshttp://162.105.81.212/JudgeOnline/problem?id=2406pku1961 Periodhttp://162.105.81.212/JudgeOnline/problem?id=1961 这个题目是1961的升级版,考察队next数组的应用,附上代码:#incl
2017-05-05 10:59:31
2195
转载 Trie树详解及其应用
一、知识简介 字典树(Trie)可以保存一些字符串->值的对应关系。基本上,它跟 Java 的 HashMap 功能相同,都是 key-value 映射,只不过 Trie 的 key 只能是字符串。 Trie 的强大之处就在于它的时间复杂度。它的插入和查询时间复杂度都为 O(k) ,其中 k 为 key 的长度,与 Trie 中保存了多少个元素无关。Hash 表号称是 O
2017-04-21 13:25:17
367
原创 51nod 1091 线段的重叠
1091 线段的重叠 X轴上有N条线段,每条线段包括1个起点和终点。线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]。给出N条线段的起点和终点,从中选出2条线段,这两条线段的重叠部分是最长的。输出这个最长的距离。如果没有重叠,输出0。Input第1行:线段的数量N(2 <= N <= 50000)。第2 - N + 1行:每行2个...
2016-12-22 11:24:09
406
原创 51nod 1305 Pairwise Sum and Divide
有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整: fun(A) sum = 0 for i = 1 to A.length for j = i+1 to A.length sum = sum + Floor((A[i]+A[j])/(A[i]*A[j])) return sum 给...
2016-12-21 19:54:50
241
原创 51nod 1009 数字1的数量
1009 数字1的数量 给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。Input输入N(1 <= N <= 10^9)Output输出包含1的个数Input示例12Output示例5 思路...
2016-12-20 17:15:49
284
转载 51nod 1003 阶乘后面0的数量
题意n的阶乘后面有多少个0?6的阶乘 = 1*2*3*4*5*6 = 720,720后面有1个0。Input一个数N(1 <= N <= 10^9)Output输出0的数量Input示例5Output示例1 编程之美有讲:一个数 n 的阶乘末尾有多少个 0 取决于从 1 到 n 的各个数的因子中 2 和 5 的个数, ...
2016-12-18 14:39:10
412
原创 51node 1001 数组中和等于K的数对
题意:给出一个整数K和一个无序数组A,A的元素为N个互不相同的整数,找出数组A中所有和等于K的数对。例如K = 8,数组A:{-1,6,5,3,4,2,9,0,8},所有和等于8的数对包括(-1,9),(0,8),(2,6),(3,5)。Input第1行:用空格隔开的2个数,K N,N为A数组的长度。(2 <= N <= 50000,-10^9 <= K <...
2016-12-18 13:31:47
597
原创 最小内积 北航第十二届程序设计竞赛网络预赛
题目描述给定两个 n维向量 A⃗ =(x1,x2,⋯,xn) 和 B⃗ =(y1,y2,⋯,yn) ,定义它们的点积为A⃗ ⋅B⃗ =∑1≤i≤nxi⋅yi对于每个向量,它的每个分量互不相同,而且任意两个分量均可交换位置。求一种交换策略使得 A⃗ 与 B⃗ 的内积最小,如果有多种满足条件的交换策略,那么还要使得交换总次数最少。请你给出最少
2016-12-12 22:01:53
746
原创 STL的vector和pair
pair的类型: pair 是 一种模版类型。每个pair 可以存储两个值。这两种值无限制。也可以将自己写的struct的对象放进去。。 pair<string,int> p; pair<int ,int > p; pair<double,int> p; 应用:如果一个函数有两个返回值 的话,如果是相同类型,就可以用...
2016-12-12 15:53:28
877
原创 判断两条线段是否相交 计算几何
对于线段A,B,如果 线段A与直线B相交 ,线段B与直线A相交 ,那么就可以认为线段A 和线段B相交。关键问题是:如何判断直线AB是否与线段CD相交呢?设直线AB的方程为:f(x,y) = 0,直线方程可以通过两点式求得。当C和D点不在直线的同侧时,直线AB必然与线段CD相交,也就是说直线AB与线段CD相交的条件为:f(C) * f(D) <= 0。代码如下: t...
2016-12-08 21:31:14
10758
原创 C++ map的基本操作和使用
map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。 map能自动建立Key - value的对应。key 和 value可以是任意你需要的类型。map中的元素是自动按key升序排序,所以不用对map进行排序,也无法排序(如果要按降序输出,可以用map.sizeof( ) 获得...
2016-12-07 21:56:17
432
转载 大组合数取模 Lucas定理 HD3037
题目:求n个数的和不超过m的方案数。如果和恰好等于m,那么就等价于方程x1+x2+...+xn = m的解的个数,利用插板法可以得到方案数为:(m+1)*(m+2)...(m+n-1) = C(m+n-1,n-1) = C(m+n-1,m)现在就需要求不大于m的,相当于对i = 0,1...,m对C(n+i-1,i)求和,根据公式C(n,k) = C(n-1,k)+C(n-1,k-1
2016-12-07 21:53:17
374
转载 斐波那契数列 矩阵求法 优化
在做编程题目的时候经常会遇到“斐波那契数列”相关的题目,尤其在做OJ中。下面说一些方法: (一)递归 递归是最慢的会发生重复计算,时间复杂度成指数级。long long fac(int n){ if(n==1) return 1; else if(n==2) return 2; else return fac(n-1)+fac(n-2);}
2016-12-06 20:48:41
586
fibonacci构造矩阵-总结.doc
2017-09-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅