基本算法
彭华成
这个作者很懒,什么都没留下…
展开
-
DP--01背包问题(南昌理工学院ACM集训队)
https://www.acwing.com/problem/content/2/题目链接01背包问题的解题思路在解决问题之前,为描述方便,首先定义一些变量:Vi表示第 i 个物品的体积,Wi表示第 i 个物品的价值,定义f[i][j]:当前背包容量 j,前 i 个物品最佳组合对应的价值我们在选第i个物品的时候,有两种选择,选第i个物品,不选第i个物品。当我们不选第i个物品的时候对应代码为f[i-1][j]当我们选第i个物品的时候对应的代码为f[i - 1][j - v[i]] + w[i原创 2021-07-31 09:31:33 · 140 阅读 · 2 评论 -
快数幂算法(南昌理工学院)
ab假设a=2,b=3,ab=23,我们可以把b化为二进制1123可以化为22原创 2021-07-23 15:08:24 · 120 阅读 · 0 评论 -
整数二分查找算法练习(南昌理工)
二分查找:1:确定一个区间,使我们要查找的值一定在区间中。2:找一个性质满足——1:性质具有二段性,将区间分成两段。——2:答案是二段性的的分界点。如下我们将区间分为红色和绿色两个部分。注意这里分为两部分并不是平均分为两部分,而是根据我们要查找的ans来分为两部分。接下来可以分为两大类第一类:ans是红色区间的右端点,M是区间的中点将[L,R]分为[L,M-1],[M,R],如果M位于红色区间,说明ans位于区间[M,R]。反之ans必然在[L,R-1]。核心代码while原创 2021-07-17 10:19:12 · 121 阅读 · 0 评论 -
辗转相除法(欧几里得算法)求最大公约数。
假如需要求1997和615两个正整数的最大公约数,以下使用欧几里得算法。1997 / 615=3(余152)615 / 152=4(余7)152 / 7=21(余5)7 / 5=1(余2)5 / 2=2(余1)2 / 1=2(余0)最后得到最大公约数为1。叫辗转相除是因为,计算的过程中,除数与被除数在更新后总要交换来回除,所以叫辗转求两个数的最大公约数的代码实现int gcd(int a, int b){ return b==0?a:gcd(b, a%b);}...原创 2021-03-16 19:17:58 · 1065 阅读 · 0 评论