- 博客(22)
- 收藏
- 关注
原创 01背包问题
0、1背包问题:题目:有N件物品和一个容量为V的背包。第i件物品的价值是value[i],重量是weight[i].求解将哪些物品装入背包使价值总和最大。思路:这是最基本的01背包问题,特点是每种物品仅有一件,可以选择放还是不放。状态转移方程:f[ i ][ v ]表示前i件物品放入一个背包容量为v的背包可以获得的最大价值。f[i][v] = max(f[i-1][v], f[i-1]...
2018-12-29 20:40:05
151
1
原创 并查集的删除
I hope you know the beautiful Union-Find structure. In this problem, you’re to implement something similar, but not identical. The data structure you need to write is also a collection of disjoint set...
2018-11-17 16:31:16
180
原创 并查集以及最小生成树
并查集是一种树型得数据结构,用于处理一些不相交的集合的合并和查询问题,集就是让每个元素构成一个单元素的集合,也就是按一定顺序将属于同一组元素所在的集合合并。并查集的两个操作:1.合并两个不相交的元素,放在同一个集合当中。2.判断两个元素是否属于同一个集合。上图是路径压缩:也就是说让这集合全部指向他们的最终boss!最小生成树:一个有n个结点的连通图的生成树是原图的极小连同子图,连同后边长...
2018-11-16 16:49:42
232
原创 二分法三分法
二分法:也称折半查找(Binary Search),折半查找要求线性表必须采用顺序的存储结构,而且表中元素关键字有序排列。首先判断a(n/2)和x谁大谁小,如果x大的话,那么x可能在a(n/2+1)到a(n)这个区间里,而一定不会再a(1)到a(n/2)这个范围内,因为是数组是递增的。然后再按同样的方法查找后半个区间即可。这样的时间复杂度是O(logn)bool find(int A[],in...
2018-11-15 17:10:40
821
原创 线段树之逆序数
求逆序数的方法:1.直接暴力求解2.线段树求解需要知道HASH(离散化)。//192和132逆序数是一样的,所以可以映射到一样的情况。求逆序数的思路:遍历每一个数字,如果这个数字前面有比它大的数字,那么比它大的数字的个数即比他大的区间的sum值,例如a=5,它的逆序数即6-10的sum值。例题:The inversion number of a given number sequenc...
2018-11-10 19:29:22
196
原创 线段的基本操作操作
这是线段树的样子,线段树是一种二叉搜索树,它将一个区间划分成一些单元,每个单元对应线段树的一个叶节点,它是平衡二叉树,最后的子节点数目为N,即区间的长度。它的查询,更新的时间复杂度是O(logn)线段树的基本操作:1.建树2.查询3.点更新4.区间更新5.区间合并建树过程//这里的m都是从1开始struct node{ int l,r,sum;//左右结点}void pu...
2018-11-09 17:15:28
285
原创 SG函数和SG定理
SG定理:**游戏和的SG函数等于各个游戏SG函数的Nim和。**意思就是例如对Nim游戏,各个游戏的SG函数也就是每一堆石子的数量即SG(x)=x.那么游戏和的SG函数就是对各个游戏SG函数进行异或求得Nim和。SG函数:首先定义mex运算,这是施加于集合得运算,表示最小的不属于这个集合的非负整数,例如mex{0,1,2,4}=3、mex[2,3,5]=0.对于任意状态x,定义SG(x)...
2018-10-26 14:35:05
187
原创 反Nim游戏
Little John is playing very funny game with his younger brother. There is one big box filled with M&Ms of different colors. At first John has to eat several M&Ms of the same color. Then his op...
2018-10-25 20:47:33
398
原创 next_permutation
next_permutation函数原型:bool next_permutation(iterator start, iterator end);当没有下一个排序的时候返回false否则返回true头文件是#include < algorithm>要注意的一点是,他返回的是当前排列的后面的排列,也就是说你要想输出全排列,必须首先要排序。每次排序过后都要改变数组每个位置的值。n...
2018-10-14 21:49:21
132
原创 STL 优先队列
优先队列也就是可以自动排序的功能强大些的队列。priority_queue&amp;lt;node&amp;gt;q;//node是结构体,结构体里面重载了’&amp;lt;‘符号priority_queue&amp;lt;int,vector&amp;lt;int&amp;gt;,greater&amp;lt;int&amp;gt; &amp;gt;g
2018-10-09 10:36:45
124
原创 素数线性筛
常规方法,用for循环从2到sqrt(n)进行遍历,如果可以被整除那么就不是素数。bool isPrime(int num){ int bound = sqrt(num)+1; //在这里定义bound,是因为如果在循环中每次都计算sqrt, //那么是一个很费时间的工作 for(int i=2;i&amp;lt;=bound;i++){ if(num%i==0)return false;...
2018-10-07 20:59:56
105
原创 快速幂取模
首先先说一下一般的幂运算:例如求a^b,那么我们就要循环b次就好了int res=1;for(int i=0;i<b;i++){ res*=a;}这样res即是ab那么这个的时间复杂度是O(n),那么我们可以把时间变得再小一点吗?答案是肯定的,可以降到O(logn)的时间复杂度。以下是核心代码int power(int a,int b){//a是底数,b是次数 int an...
2018-10-02 20:18:12
109
原创 递归之牛生
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?Input输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0&lt;n&lt;55),n的含义如题目中描述。n=0表示输入数据的结束,不做处理。output对于每个测试实例,输出在第n年的时候母牛的数量。每个输出占一行。Sample Inp...
2018-09-29 20:46:11
409
原创 字符串替换 find函数和replace函数的应用
7-43 字符串替换 (10 分) 将文本文件中指定的字符串替换成新字符串。 由于目前的OJ系统暂时不能支持用户读入文件,我们编写程序从键盘输入文件中的内容,当输入的一行为end时,表示结束。end后面有两个字符串,要求用第二个字符串替换文本中所有的第一个字符串。输入格式: Xi’an Institute of Posts and Telecommunications is co-desi...
2018-09-14 15:49:10
2770
原创 暴力循环求解题目给出的值 1089 狼人杀
题目见PAT乙级1089对于本题一个非常关键的点是暴力两重循环设出那两只狼,也就是 for(int i=1;i < N;i++){ for(int j=i+1;j<=N;j++){} } 这一部分的代码,举一反三,包括解方程,我们没有办法和人一样代入解决,只能一个一个试这去求解。言归正传,本题还说有两个撒谎的,且有狼人撒谎但不是所有狼人撒欢,那么就说一个狼人一个好人...
2018-09-10 21:32:11
262
原创 欧几里得算法之求最大公约数
求最大公约数我们一定不陌生。 那如何使用递归的思想去求最大公约数是一个很重要的点。 首先举个例子 1997和615最大公约数 通过上图我们可以看出两个数是由商和余数组成的,那么如果我们把615分成余数152*n的情况,并且没有余数,那么最大公因数就是152了,所以我们要求到余数为0的情况,而除数即为最大公约数~#include &lt;bits/stdc++.h&gt;usi...
2018-09-09 22:59:15
814
原创 广搜优先搜索之迷宫问题
广度优先搜索(Breadth First Serch):又称宽度优先搜索,其方法是系统的展开并搜索图中的所有节点,以寻找位置,它并不考虑所寻目的地的位置,而是彻底的搜索整张图,直到寻到结果为止。 也就是说我们要搜索8这个位置,我们从 9 开始,像网一样铺开,搜索7,在搜索 13,没有找到对应位置,继续搜索6,最后到8这个位置。以迷宫问题为例:定义一个二维数组: int...
2018-09-02 21:27:16
589
原创 深搜之N皇后问题
深度优先搜素(Depth First Serch):其过程简而言之是对每一个分支路径深入到不能再深入位置,即沿一条路径不断的纵深,不撞南墙不回头。 也就是加入我们要寻找8这个数字,首先,它会9-&amp;gt;7-&amp;gt;6-&amp;gt;3一直到最后一个,发现并没有寻找到8,那么我们再返回3-&amp;gt;6,还是没有8,我们继续返回3-&amp;gt;6-&amp;gt;7,发现
2018-09-02 16:13:06
290
原创 递归之错排发信件
发信件题目描述大家常常感慨,要做好一件事情真的不容易,确实,失败比成功容易多了! 做好“一件”事情尚且不易,若想永远成功而总从不失败,那更是难上加难了,就像花钱总是比挣钱容易的道理一样。 话虽这样说,我还是要告诉大家,要想失败到一定程度也是不容易的。比如,我高中的时候,就有一个神奇的女生,在英语考试的时候,竟然把40个单项选择题全部做错了!大家都学过概率论,应该知道出现这种情况的概...
2018-09-01 22:36:30
1019
原创 递归之放苹果
放苹果题目要求把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。 Input 第一行是测试数据的数目t(0 &lt;= t &lt;= 20)。以下每行均包含二个整数M和N,以空格分开。1&lt;=M,N&lt;=10。 Output 对输入的每组数据M和N,用一行输出相应的K。 Sampl...
2018-09-01 16:45:02
303
原创 初识递归之汉诺塔
递归: 链条:计算过程存在递归链条 基例: 存在一个或多个不需要再次递归的实例简单的小例子:对于n! 例如当n=5 的时候 我们知道n=0时 n!=1,所以这个就是递归出口,我们定义一个fact(n)这个函数 def fact(n): if n==0: return 1 else return n*fact(n-1)递归之汉诺塔: 规则:提...
2018-09-01 16:12:20
150
原创 贪心算法--------初步理解与应用
贪心算法:贪心算法是指总是在当前取得最优的解,而对整体却不一定是最优解,用贪心算法必须无后效性,即之前的问题不会影响之后的问题,只对当前状况有关。贪心算法的例子: 输入格式: 第一行为n,表示有n个招新宣讲会,接下来n行每行两个整数表示开始时间和结束时间,由从招新会第一天0点开始的小时数表示(24小时制)。 n <= 1000 。 输出格式: 最多参加的招聘会个数。 输...
2018-08-12 18:31:27
258
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人