#include<bits/stdc++.h> using namespace std; const int N=1e3+7; int dp[N][N]; void cinin() { for(int i=0;i<=N;i++){ dp[i][i]=dp[i][0]=1; } for(int i=1;i<=N;i++) for(int j=1;j<=i;j++){ dp[i][j]=(dp[i-1][j-1]+dp[i-1][j]); } } int main(){ cinin(); int n,m; while(cin>>n>>m){ cout<<dp[n][m]<<endl; } return 0; }
dp[n][m]指从n个数中挑选m个
还可以直接根据定义计算
//C(n,m)=n!/((n-m)!*m!) //第一种 void c(int n,int m){ if(m>n) return 0; int a=1; int b=1; for(int i=1;i<=m;i++){ a=a*(n-m+i); b=b*i; } return a/b; } //第二种,如果题目中要求对mod取余的话,可以直接计算逆元 void c(int n,int m){ if(m>n) return 0; int a=1; int b=1; for(int i=1;i<=m;i++){ a=a*(n-m+i)%mod; b=b*i%mod; } return a*ksm(b,mod-2)%mod; }