- 博客(9)
- 收藏
- 关注
原创 快速幂算法
给你3个数a,b,p。让你求a的b次方%p。题目链接:【模板】快速幂||取余运算 - 洛谷那么,我们该怎么来做这道题呢?首先,我们想到的是用b个循环,每次让a乘上它自己。代码如下:int a,b,p;scanf("%lld%lld%lld",&a,&b,&p);int x=a,y=b,m=p;int ans=1;for(int i=1; i<=b; i++){ ans=ans*a; ans=ans%p;}printf("%lld^%
2022-05-17 20:59:35
130
原创 采药(洛谷P1048)
题目这道题就是一道01背包问题T表示背包的容量,表示采摘某株草药所需要的时间就是每个物体的重量(数组W),草药的价值(数组C)就是每个物品的价值。首先,我们用一个双重循环来解决问题。iii表示物品的数量,jjj表示这个背包剩下的容量。那么,如果说jjj小于wiw_iwi(背包剩下的容量放不下wiw_iwi),那么就说明我们不可以把wiw_iwi放到背包里。那么现在的位置放的还是上一个位置留下的。if(j<w[i]){ dp[i][j]=dp[i-1][j];}接着,如果说jjj
2022-04-30 20:49:19
1112
原创 C++递归
递归是一种自己调用自己的函数,它可以用来求前一个数和后一个数有关系的函数。可以看看洛谷计算阶乘的问题。那么我们可以知道,阶乘是一个数从1乘到它自己的数字,可能会很大。但是我们看题目的数据范围,发现是可以用int(整形)来做的。我们看:1!=12!=2×13!=3×2×1…如果直接用for循环,那也可以解决,从1开始循环,一直到n为止。代码如下:#include<iostream>using namespace std;int main(){ in
2022-04-01 19:02:32
780
原创 C++递推
递推是一种根据前面的数据来求出须要的答案的一种算法。通常用来求有规律的答案。比如说斐波那契数列就可以用递推来实现。斐波那契数列的性质是前两个数字的和等于后一个数字。因此斐波那契数列的递推式是:r[i]=r[i-1]+r[i-2]。洛谷月落乌啼算钱(斐波那契数列)可以用来练习递推。这道题是让你输入一个数字(n),输出第n个斐波那契数列(保留小数点后2位)。具体操作如下:1.输入一个数,n2.定义一个大小为n的数组3.开始递推4.输出数组最后一个位置(n-1位置)以上就是求第n个
2022-04-01 18:51:55
1630
原创 gcd,lcm函数的使用
gcd(greatest common divisor)的意思是最大公约数,要求两个数的最大公约数,可以用递归(自己调用自己)的形式来写。给它设置的出口是如果后一个数字等于0,那就返回前面的数字。否则,返回后面的数,前面的数对后面的数字取余数。递归代码如下:int gcd(int a,int b){ if(b==0){ return a; }else{ return gcd(b,a%b); }}上面的代码就是手写gcd。接下来就是lcm
2022-04-01 12:34:51
3353
原创 C++枚举
枚举,就是根据已经知道的条件来求出未知的条件。通常一个一个的去试。如果试的数据符合已知条件,则就认为,这个数就是要的答案,就不再枚举下去了。所谓枚举,其实就是慢慢去试过去。但枚举有个坏处,若数据很大,很多,则枚举的范围就很广,又费空间,还费时间。所以用枚举的时候要想好空间范围,以确保达到时间的最简,与空间的最省。经典暴力枚举问题:洛谷全排列问题题目要求 :按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。还要求输出时保留5个长宽
2022-04-01 08:42:55
112
原创 C++排序算法
1.冒泡排序冒牌排序是一种经典的排序算法,它是一种稳定的排序。其原理是如果前面的数比后面的数要大,就交换两个数字的位置。代码如下:for(int i=1; i<=n-1; i++){ for(int j=1; j<=n; j++){ if(a[j]>a[j+1]){ swap(a[j],a[j+1]); } }}2.归并排序归并排序的思想是把一串数字从中间分开,然后两边分别排序,最后再合并,从而得到
2022-03-31 19:31:09
2491
原创 动态规划入门
动态规划就是递推,要找到最优的递推式,递推后找到答案。洛谷数字三角形就是一道经典例题。题目要求找到使路径经过数字的和最大的路。由此,我们可以推出,递推式。我们可以知道,一个数字上方的数值最大的路径肯定是较大的数字,所以,递推式是:dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]);以上是按照从下往上推的过程写的。所以最后的答案会在dp[0][0]。输出dp[0][0]就是最后的答案。下面是完整代码:#include<cmath> #
2022-03-31 18:55:54
260
原创 高精度加法
高精加法的位数肯定很大,所以按照字符串读入。接着用vector数组把a,b倒着存,倒着存的同时,把字符转换为整形(-'0'就可以)。然后再计算(一位一位的加),最后输出(如果有进位,那先输出进位的值)。代码如下#include<vector>#include<iostream>using namespace std;int main(){ string a,b;//按字符串读入 cin>>a>>b; int m=a.s
2022-03-29 19:23:37
70
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人