POJ1942——Paths on a Grid(组合数学)

Paths on a Grid

Description
Imagine you are attending your math lesson at school. Once again, you are bored because your teacher tells things that you already mastered years ago (this time he‘s explaining that (a+b)2=a2+2ab+b2). So you decide to waste your time with drawing modern art instead.
Fortunately you have a piece of squared paper and you choose a rectangle of size n*m on the paper. Let‘s call this rectangle together with the lines it contains a grid. Starting at the lower left corner of the grid, you move your pencil to the upper right corner, taking care that it stays on the lines and moves only to the right or up. The result is shown on the left:
Really a masterpiece, isn‘t it? Repeating the procedure one more time, you arrive with the picture shown on the right. Now you wonder: how many different works of art can you produce?
Input
The input contains several testcases. Each is specified by two unsigned 32-bit integers n and m, denoting the size of the rectangle. As you can observe, the number of lines of the corresponding grid is one more in each dimension. Input is terminated by n=m=0.
Output
For each test case output on a line the number of different art works that can be generated using the procedure described above. That is, how many paths are there on a grid where each step of the path consists of moving one unit to the right or one unit up? You may safely assume that this number fits into a 32-bit unsigned integer.
Sample Input
5 4
1 1
0 0
Sample Output
126
2

题目大意:

    给定一个M*N的方格。问有多少种走法使其从左下角到右上角。

解题思路:

    简单的组合数学。

    从左下角到右上角。毕竟要向右M步,向上N步。共计M+N步。求Com[M+N][M]即可。

    PS:Com[M+N][M]=Com[M+N][N] 在求Com的时候,可以选择min(M,N)来进行计算。否则超时。。。

    PS2:注意被调写法的正确性。若先算分子后算分母会爆longlong。

Code:

 1 /*************************************************************************
 2     > File Name: poj1942.cpp
 3     > Author: Enumz
 4     > Mail: [email protected]
 5     > Created Time: 2014年10月21日 星期二 20时12分35秒
 6  ************************************************************************/
 7
 8 #include<iostream>
 9 #include<cstdio>
10 #include<cstdlib>
11 #include<string>
12 #include<cstring>
13 #include<list>
14 #include<queue>
15 #include<stack>
16 #include<map>
17 #include<set>
18 #include<algorithm>
19 #define MAXN 100000
20 using namespace std;
21 long long c(long long a,long long b)
22 {
23     long long ret=1;
24     for (long long i=1;i<=a;i++)
25     {
26         ret=ret*(b--)/i;   /*注意其正确性,每经过i个数,必有一个能被i整除*/
27     }
28     return ret;
29 }
30 int main()
31 {
32     long long a,b;
33     cout<<c(2,3)<<endl;
34     while (cin>>a>>b)
35     {
36         if (a>b) swap(a,b);
37         if (!a&&!b) break;
38         cout<<c(a,a+b)<<endl;
39     }
40     return 0;
41 }
时间: 2024-10-19 12:46:17

POJ1942——Paths on a Grid(组合数学)的相关文章

poj1942 Paths on a Grid 【排列组合】

关于这个题想说一下,刚开始准备按照有一个含有n个数的非递减序列,每个数最大值为m,数字可以重复,有多少种这样的序列,像是一个蛮复杂的排列组合 其实这道题,从left bottom到right up只能向右或者向上,也就是m+n个格子里面取m个格子写右,n个格子写上,就成了个很2的排列组合问题 值得强调的是,这个题求组合数是用分数相乘来求的,怕double丢精度可以末尾+0.5然后转化为longlong来进行四舍五入 这个题int好像过不了 说个蛮逗比的...最近不是写了个交题的脚本么,本来是一水

poj1942(Paths on a Grid)

题目地址:Paths on a Grid 题目大意: 给你一个矩形的格子,让你从左下角走到右上角,每次移动只能向上或者向右,问你有多少种可能的路径. 解题思路: 水题,排列组合.推出公式C(m+n,较小的那个数) 代码: 1 #include <algorithm> 2 #include <iostream> 3 #include <sstream> 4 #include <cstdlib> 5 #include <cstring> 6 #inc

POJ 1942 Paths on a Grid (组合数学)

题目地址:POJ 1942 这题就是求组合数c(n,n+m),高中的时候做过这种组合题,现在居然推不出来了..sad...时光催人老.... 代码如下: #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib.h> #include <map> #incl

POJ 1942 Paths on a Grid(简单组合数学)

Paths on a Grid Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 22836   Accepted: 5622 Description Imagine you are attending your math lesson at school. Once again, you are bored because your teacher tells things that you already mastere

Paths on a Grid(规律)

Paths on a Grid Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 23270   Accepted: 5735 Description Imagine you are attending your math lesson at school. Once again, you are bored because your teacher tells things that you already mastere

[ACM] POJ 1942 Paths on a Grid (组合)

Paths on a Grid Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 21297   Accepted: 5212 Description Imagine you are attending your math lesson at school. Once again, you are bored because your teacher tells things that you already mastere

Paths on a Grid POJ 1942 (组合数学 || 暴力)

Imagine you are attending your math lesson at school. Once again, you are bored because your teacher tells things that you already mastered years ago (this time he's explaining that (a+b) 2=a 2+2ab+b 2). So you decide to waste your time with drawing

组合数学入门

组合数学的意义广泛,但是OI联赛中常用的是排列组合,所以我就先写一点排列组合的知识,联赛后补上更多的内容,在此之前不了解排列组合基本知识的同学建议移步信息学奥赛一本通初赛篇,讲得很好.本文章虽然也是入门,但我懒得写详细介绍,所以直接开始讲基础知识啦. 由于博客园的LaTeX很不方便,我就不写LaTeX了. 组合的表示:C(n,m)表示从n个数当中选m个出来的方案数. 排列的表示:A(n,m)表示从n个数中找出m种排列. 排列组合的基本性质 1.C(n,m)=C(n-1,m)+C(n-1,m-1)

杭电ACM分类

杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDIATE DECODABILITY