一些公式或者知识(不断补充)

来源:互联网 发布:暴风tv 直播软件 编辑:程序博客网 时间:2024/04/29 17:58

斯特林公式(求n的阶乘的近似值)
普通计算:N!=1*2*3*……*N;
要计算N!后得到的数字的位数则是:lg(N)+1;
但当N很大时,可用斯特林公式进行优化:
N!=sqrt(2*pi*N)*(N/e)^N;
pi=3.1415926=acos(-1.0;
e=2.7182818284590452354;
lg(N!)+1=(lg(2*pi)+lgN)/2+N*(lg(N-lge)+1;

圆锥曲线辨别
Ax^2+Bxy+Cy^2+Dx+Ey+F=0;
当B^2-4AC>0时 双曲线;
当B^2-4AC<0时 椭圆/圆;
当B^2-4AC=0时 抛物线;
更详细:
圆:B=0,A=C !=0,D^2+E^2-4AF>0;
椭圆:B^2-4AC<0,A(AE^2+CD^2-BDE)+AF(B^2-4AC)>0;
双曲线:B^2-4AC>0,AE^2+CD^2-BDE+F(B^2-4AC)!=0;
抛物线:B^2-4AC==0,AE^2+CD^2-BDE!=0;
两条相交直线:B^2-4AC>0,AE^2+CD^2-BDE-F(B^2-4AC)==0;
两条平行直线:B^2-4AC==0,BD-2AE==0,A!=0或C!=0,D^2+E^2-4F(A+C)>0;
两条重合直线:B^2-4AC==0,BD-2AE==0,A!=0或C!=0,D^2+E^2-4F(A+C)==0;
一条直线:A=B=C=0,DE!=0;

最小公倍数
int gcd(int a,int b):

if(b) return gcd(b,a%b);else  return a;

int lcm(int a,int b):

return a/gcd(a,b)*b;

组合数
long long C(int n,int m):

if(m<n-m) m=n-m;long long ans=1;for(int i=m+1;i<=n;i++) ans*=i;for(int i=1;i<=n-m;i++) ans/=i;return ans;

卡塔兰数
Cn=(2n)!/(n+1)!/n!
1 2 5 14 42 132 429 1430 4862 16796

鸽巢原理
解释一:若有n个笼子和n+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少2只鸽子。
解释二:若有n个笼子和kn+1只鸽子,所有的鸽子都被关在鸽笼里,那么至少有一个笼子有至少k+1只鸽子。
推广:如果要把n个物件分配到m个容器中,必有至少一个容器容纳至少⌈n / m⌉个物件。(⌈x⌉大于等于x的最小的整数)。

关于hdu1297的分析
分男女生考慮,設總共有n個人(f(n)表示當有n個人的時候合法序列的個數,ak表示第k個人),當a1為男生時,有f(n-1)種可能,當a1是女生時,a2必為女生;當a1、a2都為女生時,a3為男生,有f(n-3)種可能,當a1、a2、a3都為女生,a4為男生時,有f(n-4)種可能,以此類推(下式中1表示n全為女生時那種情況,規定f(0) = 1), 故有 f(n) = f(n-1) + f(n-3) + f(n-4) + f(n-5) + … + f(1) + f(0) + 1; 所以 f(n-2) = f(n-3) + f(n-5) + f(n-6) + … + f(1) + f(0) + 1; 由以上兩式得 f(n) = f(n-1) + f(n-2) + f(n-4)

0 0
原创粉丝点击