1.qsort库函数排序
qsort(需要被排序的数组,数组元素个数,每个元素大小,排序函数名)
需要自己写一个排序函数,其实就是比大小
int cmp(const void x,const void y)
{
return *(int *)x-*(int *)y;
}
这是按升序排序,降序的话只要换个顺序就行了
每个元素大小不能弄错,否则会发生错误
2.快速幂
a^b mod c=((a²)^(b/2)) % c , b=偶数
a^b mod c=((a²)(b/2)*a) % c ,b=奇数
运用这个公式能迅速将答案算出来
3.深搜基础题
P1036 [NOIP2002 普及组] 选数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
跟暴力差不多,将每个数搜出来就行了,在判断是不是素数
核心代码为:
void dfs(int m,int s,int x)
{
if(m==k+1)
if(isprime(s)) {s=0;ans++; return ; }
for(int i=x;i<n;i++)
dfs(m+1,s+a[i],i+1);
}
P1294 高手去散步 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
首先将可以互相到达的点设置为1并且把时间保存下来:
因为一个点只能访问一次,所以要做标记,搜完一遍后一定要将标记撤掉:
P1605 迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
基本dfs模板,但是一定要将起点和障碍标记为访问过,否则会访问两遍,然后将走过的点标记
4.dp
dp[i][j]:最多有i个0和j个1的最大子集的大小为dp【i】【j】
首先要将集合中的0和1统计一下
递推公式为:
完全背包:
完全背包与之前的差别就在于可以拿无数件,开始我在想为什么不能用贪心做,按价值与重量之比求解,后面举了一个例子就明白了,容量为4的背包,两件物品分别是
2 4
3 5
原因就是不能保证背包的容量,但如果是物品可以拆解的话就是用贪心做
递推公式为:
与01背包的区别在于j是从小到大遍历,因此可以添加很多件
典型的完全背包问题
dp【j】:金额为j的合成方法有dp【j】种,
因此递推公式为:
初始话dp[0]一定要初始化为1,否则后面都是0