大水题,赤果果的求组合数的题。
n*m的网格,从最左下角到最右上角的不同路径的走法。
ans=c[n+m][n];即从总长度中选n条是竖着走的(假设n是网格的高度),那么这个组合数就已经得出了所有的不同路径的数目。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
long long n,m;
long long work(long long sum,long long k)
{
long long i,j=1,ans=1;
for(i=0;i<k;i++)
{
ans*=(sum-i);
while(ans%j==0&&j<=k)
{ans/=j;j++;}
}
return ans;
}
int main()
{
while(cin>>n>>m)
{
if(n==0&&m==0)
break;
printf("%lld\n",work(n+m,min(n,m)));
}
return 0;
}