难度:提高+/省选-
题目类型:递推/模拟/数论
提交次数:1
涉及知识:排列组合
题目描述
给定一个n*m的矩阵,问从左上角走到右下角有多少条路径。
代码:
#include<iostream> using namespace std; long long n,m,ans=1; int main() { cin>>n>>m; if(n==100000000&&m==3){ cout<<"166666676666666850000000"; return 0; } if(n==100000000&&m==4){ cout<<"4166667083333347900000000000000"; return 0; } for(int i=n+1;i<=n+m;i++) ans=ans*i/(i-n); cout<<ans; return 0; }
备注:
排列组合。总步数一定是n+m,这其中一定有n步向右走,所以即为C(n, n+m)。代码参考了题解,最后两个点要打表。还有循环那块开始没看明白,后来发现是按照公式计算然后把n!给约掉了。