パスカルの3角形
概要
パスカルの三角形によって二項係数${}_a \mathrm{C}_b (0\leq a,b\leq N )$を求める.
計算量
前計算$O(N^2)$,クエリ$O(1)$
ソースコード
struct Pascal{
//tri[a][b] = aCb
vector<vector<long>> tri;
int N;
Pascal(int N){
this->N = N;
init();
}
void init(){
tri.clear();
tri.push_back({1});
for(int i=1;i<N;i++){
vector<long> add(0);
add.push_back(1);
for(int k=0;k<i-1;k++){
add.push_back(tri.back()[k]+tri.back()[k+1]);
}
add.push_back(1);
tri.push_back(add);
}
}
long com(int a,int b){
if(a<b)return 0;
return tri[a][b];
}
};