您的位置:首页 > 其它

POJ 1942 Paths on a Grid

2013-02-16 01:06 483 查看
题意:一个A*B的矩阵,题问从左下点沿矩阵的边走到右上点有多少种不同的走法,每次只能向右走或者向上走。

思路:排列组合计数。
/*每一个点的不同走法的总数,是由左边的点和下边的点的总数之和。*/
/*这就很容易联想到排列组合的一个公式:

,其中,n为走到这点所总共经过的边数(不分横边竖边),r可以看为已经走过的横边或者竖边。*/
/*即有n = a + b,r = a 或者 r = b。*/-----借鉴别人的思路

Source Code

Problem: 1942User: imutzcy
Memory: 164KTime: 0MS
Language: C++Result: Accepted
Source Code
#include<functional>
#include<algorithm>
#include<iostream>
#include<fstream>
#include<sstream>
#include<iomanip>
#include<numeric>
#include<cstring>
#include<cassert>
#include<cstdio>
#include<string>
#include<vector>
#include<bitset>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<list>
#include<set>
#include<map>

using namespace std;

typedef long long LL;

LL C(LL m,LL n)
{
if(m>n-m) m=n-m;
LL ans=1,T=m;
while(T--){
ans*=n--;
while(ans%m==0&&m>1)
ans/=m--;
}
return ans;
}

int main(){
LL a,b;
while(~scanf("%lld%lld",&a,&b),a+b)
printf("%lld\n",C(a,a+b));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: