博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常用的一些模板
阅读量:6285 次
发布时间:2019-06-22

本文共 3255 字,大约阅读时间需要 10 分钟。

快速幂取模
int Pow(int a,int b,int c){	int res=1;	while(b>0)	{		if(b&1) res=res*a%c;		a=a*a%c;		b>>=1;	}	return res;}//复杂度O(logn)
gcd
int gcd(int a,int b){	return b==0?a:gcd(b,a%b);}
扩展欧几里得(递归)
int exgcd(int a,int b,int &x,int &y){    if(b==0)    {        x=1;        y=0;        return a;    }    int r=exgcd(b,a%b,x,y);    int t=x;    x=y;    y=t-a/b*y;    return r;}
递归实现n!
int fact(int n){	/*if(n==0||n==1) return 1;	else return n*fact(n-1);*/	return n==0?1:fact(n-1)*n;//上面注释的简化版 }
背包类
01背包(每种物品只有一个)
//n 物品数量,v 背包容量 //size 单个物品体积,value 单个物品价值void bag01(){	for(int i=0;i
=size[i];j--) { dp[j]=max(dp[j],dp[j-size[i]]+value[i]); } cout<
<
完全背包(每种物品有无穷多)
void complete(){	for(int i=0;i
多重背包(每种物品数量有限)
//n 物品数量,v 背包容量 //size 单个物品体积,value 单个物品价值,num 该物品的数量 void multiply(){	for(int i=0;i
=d1*size[i];j--) { dp[j]=max(dp[j],dp[j-d1*size[i]]+value[i]*d1); } d2-=d1; d1*=2; } for(int j=v;j>=d2*size[i];j--) dp[j]=max(dp[j],dp[j-d2*size[i]]+value[i]*d2); } cout<
<
1~n全排列(递归实现)
int vis[10];//用于标记是否被访问过,0--未访问  1--已访问int ans[10];//用于存储答案int step,n;void dfs(int step){    for(int i=1;i<=n;i++)    {        if(vis[i]==0)        {            vis[i]=1;            ans[step]=i;//将答案存储            if(step
1~n全排列(利用STL)
void Full(int n){	for(int i=0;i
最长递增子序列
int a[maxn];int dp[maxn];int n;void longest(){	dp[0]=a[0];	int pos;	int L=1;	for(int i=0;i
DFS模板
void dfs()//参数用来表示状态{    if(到达终点状态)    {        ...//根据题意来添加        return;    }    if(越界或者是不符合法状态)        return;    for(扩展方式)    {        if(扩展方式所达到状态合法)        {            ....//根据题意来添加            标记;            dfs();            修改(剪枝);            (还原标记);            //是否还原标记根据题意            //如果加上(还原标记)就是 回溯法        }            }}

判断1~1e9之内的数是不是素数

//是素数prime(n)==truebool prime(int n)  {      for(int i=2;i*i<=n;i++)          if(n%i==0)              return false;      return n!=1;  }  vector
divisor(int n) { vector
res; for(int i=1;i*i<=n;i++) { if(n%i==0) { res.push_back(i); if(i!=n/i) res.push_back(n/i); } } return res; } map
factor(int n) { map
res; for(int i=2;i*i<=n;i++) { while(n%i==0) { ++res[i]; n/=i; } if(n!=1) res[n]=1; return res; } }

Warshall算法求传递闭包(O(n^3))

void Warshall(){	for(int i=1;i<=n;i++)	{		for(int j=1;j<=n;j++)		{			if(a[j][i])			{				for(int k=0;k<=n;k++)				{					a[j][k]=a[j][k]|a[i][k];				}			}		}	}}

最长回文子串长度(Manacher算法)

//复杂度O(n) void Manacher()  {      l=strlen(ch);      //处理字符串,在字符串开头,结尾都加上'#'       for(int i=l;i>0;i--)//注意是从最后一位开始处理       {          ch[2*i]=ch[i-1];          ch[2*i+1]='#';      }      ch[0]='$';//避免出现越界问题       ch[1]='#';      int id,mx,ans;//id最大回文子串中心的位置,mx最大回文子串的边界       id=mx=ans=0;      for(int i=1;i<=2*l+1;i++)      {          if(mx>i) vis[i]=min(vis[2*id-i],mx-i);            else vis[i]=1;            while(ch[i+vis[i]]==ch[i-vis[i]]) vis[i]++;            if(mx

To be continued...

转载于:https://www.cnblogs.com/Friends-A/p/9308982.html

你可能感兴趣的文章
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>
关于FreeBSD的CVSROOT的配置
查看>>
基于RBAC权限管理
查看>>
基于Internet的软件工程策略
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
Vue------第二天(计算属性、侦听器、绑定Class、绑定Style)
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>
教程前言 - 回归宣言
查看>>
PHP 7.1是否支持操作符重载?
查看>>