标签:sea span logs 二分 arc 个数 code 返回 sqrt
这里发一些基本的模版,就这样~
1. 0-1背包
int bag_01() { //01背包 for(int i = 1; i <= n; i++) for(int j = c; j >= w[i]; j--) f[j] = max(f[j], f[j-w[i]]+v[i]); return f[c]; } //对于完全背包(物品不限):将第二个循环的顺序反向即可。
2. 二分查找
//这是找最大 int Binary_Search(int Left, int Right) { while(Left <= Right) { int Mid = (Left + Right) / 2; if(check(Mid)) Left = Mid + 1; else Right = Mid - 1; } return Left - 1; } //这是找最小 int Binary_Search(int Left, int Right) { while(Left <= Right) { int Mid = (Left + Right) / 2; if(check(Mid)) Right = Mid - 1; else Left = Mid + 1; } return Right + 1; }
3. 计算n的因子个数
int calc(int n){ //calc(n) : 计算n的因子个数 int ans=1, t; for (int i=2; i*i<=n; i++){ for (t=0; n%i==0; n/=i) t++; ans*=t+1; } if (n>1) ans*=2; return ans; }
4. 最大公约数
int gcd(int a, int b) { return b ? gcd(b, a%b) : a; } //gcd函数返回a和b的最大公约数(a>b) 最小公倍数=a*b/gcd(a,b)
5. 最长公共子序列
int LCS() { for(int i = 1; i <= xl; i++) for(int j = 1; j <= yl; j++) if(x[i] == y[j]) f[i%2][j] = f[(i-1)%2][j-1]+1; else f[i%2][j]=max(f[(i-1)%2][j],f[i%2][j-1]); return f[xl%2][yl]; }
6. 筛法求素数
void prime(int n) { //筛法求素数表 for(int i = 2; i <= sqrt(n); i++) if(!p[i]) for(int j = i+i; j <= n; j += i) p[j] = 1; } //p[i]=0:该数是素数;p[i]=1:该数不是素数
7. 快速幂
int quickpow(int a, int b, int m){ //快速幂 求a^b%m的值 int t=1; while (b){ if (b&1) t=t*a%m; b>>=1; a=a*a%m; } return t; }
8. 快速读入整数
inline void read(int& x){ char c=getchar(); int f=1,num=0; for(;c<‘0‘||c>‘9‘;c=getchar()) if(c==‘-‘)f=-1; for(;c>=‘0‘&&c<=‘9‘;c=getchar()) num=num*10+c-‘0‘; x=num*f; }
这些都是最基本的模版哦!如果有什么其他的有用的模版欢迎在评论区中提出哦!
标签:sea span logs 二分 arc 个数 code 返回 sqrt
原文地址:http://www.cnblogs.com/farway17/p/6936984.html