- 博客(21)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 背包问题之有依赖的背包(包含模板)
有依赖的背包最好理解的题就是NOIP的金明的预算方案,其每个物品有主件和附件,附件必须在主件已经购买了的请款下才能购买,这里牵扯到有依赖的背包的一个问题,将这些进行分组之后就有多种情况即:不能购买主件,只能购买主件,能购买主件和多个附件,这些情况组成了多个可能的情况,所以这种情况可以先将一个组当中的附件进行一次01背包得到其背包容量为0~V-w[i]时的所有可能情况,然后将整个组当成一个分组背包...
2019-08-26 16:23:02
908
3
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 大整数乘除法(vector)写法
相比于本蒟蒻的上一个string写法不知道优化了多少(上一次写的大整数加减乘除(string)写法链接:https://blog.csdn.net/MaplePlane/article/details/95761741)这几天学习了下发现vector写的是真的简便真的好写推荐用vector写法来做算法题下面附上乘除法的代码(加减法的还没来得及写后续不上O_O!!!)vector<int&...
2019-08-03 00:05:42
1601
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 费马定理在算法取模中的应用
费马小定理在算法中的意义1640 年,法国业余数学家 Pierre de Fermat (通常译作“费马”)发现,如果 n 是一个质数的话,那么对于任意一个数 a , a 的 n 次方减去 a 之后都将是 n 的倍数。a^n - a=k*n费马小定理揭示了:当p是一个素数并且a和p互质(除了1无公约数)时,a^(p-1) %p≡1a^(p-1) mod p = 1 mod p 推出分数的取...
2019-07-14 10:07:24
944
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 STL常用总结
为什么要用STL,STL的好处?STL是一个打包了数据结构的函数库,STL的所有对象都没必要提前分配内存大小,它会根据对象存取数据的大小来分配空间大小(系统自动扩张)1.vector(向量)向量没有确定数据类型所以向量可以是多种数据类型,但是注意一个向量对象只能有一种数据类型,可以构造二维向量(二维数组)比如二维整型向量vector<vector> 值得注意的是二维向量的大元素和...
2019-07-08 09:18:19
624
原创 换教室
今天做练习题的时候做到一道练习题叫换教室原以为是一道很复杂的题,但是实用了Floyd求得单源最短路劲之后就是一个简单的求期望,通过图表发现是一个二维控制的期望这里选择用dp来做,实用dp[i][j][k]来表示第i个时间段交换了j次教室k代表这次交换或者不交换dp太长了233这里就不写了思路应该是很明确的题目:链接:https://ac.nowcoder.com/acm/problem/164...
2019-10-29 15:56:44
312
原创 STL中algorithm的常用函数集
1.lower_bound 和upper_bound用于查找数组中第一个比查找的数大的数的为止,但是区别是lower_bound查找是大于等于被查找的数,而upper_bound是查找的大于被查找的数2.sort对指定数组进行排序默认从小到达如果是结构体则默认以第一个为优先级排序,如果第一个相同那么以第二个为优先级从小到大排序,缺点时间复杂度不稳定3.reverse对指定序列进行反向排序...
2019-08-30 11:20:59
477
原创 线性动态规划
1.导弹拦截题目:某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统。思路:由于以后发射都不能高...
2019-08-30 10:59:04
859
原创 两个参数都是高精度的大整数加减乘除(vector)
话不多说,这次写的是两个参数均是vector的高精度加减乘除,直接上代码:vector<int> PlusH(vector<int>a, vector<int>b)//此参数的vector的a如果真实值为123那么vector里变成321{ vector<int>c; c.clear(); for (int i = 0, t = 0; i ...
2019-08-28 10:34:06
533
原创 区间动态规划(模板:石子合并)
区间动态规划即以一个区间长度作为元元素,将其区间长度作为判定的值,例如石子合并:在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分以f[i][j]作为将i~j的合围一堆需要的力量,当i==j的时候f[i][j]=0其余时候当球最大值时...
2019-08-26 23:28:26
651
原创 洛谷P1062(数列)
题目:给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是:1,3,4,9,10,12,13,…即3^0, 3^1, 3^0+ 3^1 ,3^2, 3^0+ 3^2, 3^1+ 3^2, 3^0+ 3^1+ 3^2 …请你求出这个序列的第N项的值(用10进制数表示)。例如,对于k=3,N=100,正确答案应该是9...
2019-08-20 16:47:25
965
原创 洛谷P1108(低价购买)
题目:“低价购买”这条建议是在奶牛股票市场取得成功的一半规则。要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买;再低价购买”。每次你购买一支股票,你必须用低于你上次购买它的价格购买它。买的次数越多越好!你的目标是在遵循以上建议的前提下,求你最多能购买股票的次数。你将被给出一段时间内一支股票每天的出售价(2^{16}216范围内的正整数),你可以选择在哪些天购买这支股票。每次购买...
2019-08-20 15:11:00
212
原创 浅谈动态规划(背包问题)
01背包一个空间大小为M的背包有N个物体可以装进去,每个物体都有所占空间体积和相对应的价值怎么样装使得其装的价值最大其每个物体都会占体积也有对应的价值,那么就分为一个物体装或者不装,假如用f[i][j]来代表有i个物体背包空间一共为j价值最大的情况,w[i]表示重量,v[i]代表价值,那么就有f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i]) ,原理是...
2019-08-18 11:43:29
186
原创 前缀和理念和应用,广义阿基米德原理
1.前缀和是指前面一部分得和a[1]+a[2]+…+a[n]用一个O(1)得方法解决一维前缀和:用sum[i]表示a[1]+a[2]+…+a[i]得和,sum[0]=0,所以a[i]+a[i+1]+…+a[j]=sum[j]-sum[i-1];二维前缀和: 用sum[i][j]表示a[1][1]+…+a[i][j]; sum[i][0]=0;sum[0][j]=0; 所以a[x1x2][y1y...
2019-08-05 00:41:48
307
原创 国王游戏(大整数用自己写的vector做的)
恰逢 H H国国庆,国王邀请 nn 位大臣来玩一个有奖游戏。首先,他让每个大臣在左、右手上面分别写下一个整数,国王自己也在左、右手上各写一个整数。然后,让这 nn 位大臣排成一排,国王站在队伍的最前面。排好队后,所有的大臣都会获得国王奖赏的若干金币,每位大臣获得的金币数分别是:排在该大臣前面的所有人的左手上的数的乘积除以他自己右手上的数,然后向下取整得到的结果。国王不希望某一个大臣获得特别多的奖...
2019-08-03 21:42:16
289
原创 ACMDay13大整数加减乘除
大整数加减乘除法还没搞定(本蒟蒻搞了一上午)233/*大整数加减乘除的参数均为正若需要用到负可在主函数中进行变换操作*/#include<iostream>#include<string>#include<algorithm>using namespace std;string s1,s2,s3;int file = 0;void Pl...
2019-07-13 16:18:55
296
原创 ACMDay11
杨辉三角算法#include<iostream>#include<vector>#include<algorithm>using namespace std;bool visit[20];int flag = 0;int yh[13];int n, sum;//初始第一行有n个数,最后的值为sumvector<int>a;/*i...
2019-07-11 20:49:14
105
原创 KMP算法理解
KMP相对于原有的暴力匹配,更加优秀,在匹配失败的情况下,不需要往后一个一个挪而是直接挪到前面有最长匹配串的时候可以节约时间和内存,关键点在于怎么求匹配串的Next数组,最后在匹配失败的j位置利用j-next[j]实现KMP的字符串匹配优化#include <iostream>#include <algorithm>#include<bits/stdc++.h&...
2019-07-11 18:32:25
76
原创 关于dfs(深度搜索)的理解
深度搜索是一个求多步骤最佳解的一个最实用的方法,其原理来自与树,树的每个节点都有子节点(最末端不算)那么相当于多种选择,通过条件选择一个又一个节点产生出不同情况,再根据最后的出口条件就可以得到最佳解了。(本人蒻楉大佬有问题请指教)dfs实现的是一个递归条件所以其开头是从问题的开始位置开始递归每次得到满足条件,标记赋值后就往下递归,最后再回溯成初始条件方便第一次往后继续判断是否还有更优解dfs(...
2019-07-08 21:55:35
400
原创 ACM Day6
位运算符:&:9&5=11001&01010001&运算符即为只有全部为1的话才是1 其他情况均输出0|:9|5=13100101011101|位运算符即为有1的话就均为1只有两个0的情况才为0^:9^5=121001^01011100^位运算符即上下相同为1不同为0~:~9=65526~00000000000...
2019-07-07 08:53:30
189
原创 ACM集训第四天
欧拉筛法:定义一个n+1长度的数组,全部定义为1即认为其全是素数,0和1首先排除其不是素数赋值为0,从2开头,只要是a[i]==0就跳过不然就就往后判断循环,2是素数里面写for(int j=2;ji<=n;j++)a[ji]=0 将素数的全部倍数全部赋值为0,目前已知的最快的判断的判断素数的方法动态规划背包法:一个承重M的背包有N个物体每个有各自的价值,问最多能装多少价值的东西,怎么...
2019-07-05 08:41:34
155
原创 ACM集训第二三天感悟
需要注意数据的范围,比如double和int等精度和范围打表法:先用暴力法吧全部情况的答案打到一个文件里面,然后吧文件里的数据放到一个数组里面,最后的代码就是一个输出数组,可以让半个小时的程序只需要几毫秒就成功AC记忆化搜索,用一个全局多维的数组全部初始化为0,然后在递归每次给一个数组的值赋值,以后要是需要求这个值的话就可以直接输出(判断它是否为0,如果不为0就直接输出),可以剩下很多时间和内...
2019-07-03 21:07:00
232
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人