原题:https://vjudge.net/problem/51Nod-1118
#include<bits/stdc++.h> using namespace std; int c[2005][2005]; int main(){ int n,m,b; cin>>m>>n; for (int i = 0; i <=2000; ++i) { c[i][0]=1; //C 0 i=1 从i个东西里选0个或选i个的情况只有一种 for(int j=1;j<=i;j++){ c[i][j]=(c[i-1][j-1]+c[i-1][j])%1000000007; } } cout<<c[n+m-2][n-1]; //因为是从0开始,所以每个都要减一 return 0; }
#include<cstdio> #include<algorithm> using namespace std; int f[1001][1001]; int main() { int n,m; for(int i=1; i<1001; ++i) { f[1][i]=1; f[i][1]=1; } while(~scanf("%d %d",&m,&n)) { for(int i=2; i<=m; i++) { for(int j=2; j<=n; j++) { f[i][j]=f[i-1][j]+f[i][j-1]; //动态规划 ,感觉理解一点,但学长说难的动态规划会让我怀疑人生。。。 f[i][j]%=1000000007; } } printf("%d ",f[m][n]); } return 0; }