【POJ - 1942 】Paths on a Grid (组合数学,求组合数的无数种方法)

题干:

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 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

题目大意:

一个n行m列的矩阵,让你从左下角走到右上角,每次只能向上或者向右走,问你有多少种方法数。

解题报告:

  一道高中数学题啊,,,一共肯定走n+m步,我们挑n步向上走,剩下m步都向右走就可以了。所以其实就是求C(n+m,n)或者C(n+m,m)。他说范围不会超Unsigned int。我们这里用longlong去存。刚开始想着打表,,因为C(20,10)这样的数就很大了,,肯定不会超1000吧。。。然后就RE了,,一想发现确实是这样,因为我也可以C(100000,1),这样的数也是不超int范围的,,但是你打表就打不出来了。。

考虑用公式C(n,m)公式写出来发现不能用啊,因为阶乘这东西可不是闹着玩的,,,10的阶乘就300W(3e6)了。。所以我们只能提前除掉其中一部分。。

其实这题如果加个取模就好做了。。。一万种方法可以求。。(甚至可以Lucas)但是这题不能用。

所以这题两个解法,一个是用double暴力,最后四舍五入得到答案。

另一个是直接用longlong去约分,因为会发现有中间项可以约分并且一定可以整除。

此时发现中间项可以分母分子约掉,,所以是可以整除的不会有精度损失。 

RE代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;ll C[1005][1005];
int main()
{C[0][0] = 1;for(int i = 1; i<=1002; i++) {C[i][0] = 1;for(int j = 1; j<=1002; j++) {C[i][j] = C[i-1][j] + C[i-1][j-1];}}int n,m;while(~scanf("%d%d",&n,&m)) {if(n+m==0) break;printf("%lld\n",C[n+m][n]);}return 0 ;}

 

TLE代码:(感觉TLE的原因就是因为没有去取m和n中的较小值)

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;//ll C[2005][2005];
ll c(ll n,ll m) {ll x = n-m;ll all = x;double res = 1;for(ll i = 1; i<=all; i++) {res *= (1.0*n)/x;x--,n--;}return round(res);
}
int main()
{
//	C[0][0] = 1;
//	for(int i = 1; i<=1000; i++) {
//		C[i][0] = 1;
//		for(int j = 1; j<=1000; j++) {
//			C[i][j] = C[i-1][j] + C[i-1][j-1];
//		}
//	}ll n,m;while(~scanf("%lld%lld",&n,&m)) {if(n+m==0) break;printf("%lld\n",c(n+m,min(n,m)));}return 0 ;}

 

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define ll long long
#define pb push_back
#define pm make_pair
#define fi first
#define se second
using namespace std;
const int MAX = 2e5 + 5;//ll C[2005][2005];
ll c(ll n,ll m) {//c(5,2)ll cha1 = n-m;ll cha2 = m;ll cha = min(cha1,cha2);ll j = n-cha+1;ll i = 1;ll res = 1;for(;i<=cha;i++,j++) {res = res*j/i;}return res;
}
int main()
{
//	C[0][0] = 1;
//	for(int i = 1; i<=1000; i++) {
//		C[i][0] = 1;
//		for(int j = 1; j<=1000; j++) {
//			C[i][j] = C[i-1][j] + C[i-1][j-1];
//		}
//	}ll n,m;while(~scanf("%lld%lld",&n,&m)) {if(n+m==0) break;printf("%lld\n",c(n+m,min(n,m)));}return 0 ;}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441271.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编译原理last集c语言,编译原理作业集-第七章.doc

编译原理作业集-第七章第七章 语义分析和中间代码产生本章要点1. 中间语言&#xff0c;各种常见中间语言形式&#xff1b;2. 说明语句赋值语句布尔表达式控制语句的翻译&#xff1b;3. 过程调用的处理&#xff1b;4. 类型检查&#xff1b;本章目标掌握和理解中间语言&#xff0…

【CodeForces - 244A 】Dividing Orange (构造,水题)

题干&#xff1a; One day Ms Swan bought an orange in a shop. The orange consisted of nk segments, numbered with integers from 1 to nk. There were k children waiting for Ms Swan at home. The children have recently learned about the orange and they decided…

兔子吃萝卜的c语言编程,狼追兔子的c语言实现

满意答案16guoyuming2013.03.05采纳率&#xff1a;49% 等级&#xff1a;13已帮助&#xff1a;8005人用单链表实现#include #includetypedef struct node{int cave;struct node * next;}node,*LinkList;void main(){int i0,j,count1; // 初始值为1&#xff1b;LinkList L,p,h…

【CodeForces - 244B】Undoubtedly Lucky Numbers (dfs打表 + 二分)

题干&#xff1a; Polycarpus loves lucky numbers. Everybody knows that lucky numbers are positive integers, whose decimal representation (without leading zeroes) contain only the lucky digits x and y. For example, if x  4, and y  7, then numbers 47, 74…

c语言二叉树构造与输出,C语言数据结构树状输出二叉树,谁能给详细的解释一下...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼void TranslevelPrint(Bitree bt){struct node{Bitree vec[MAXLEN]; //存放树结点int layer[MAXLEN]; //结点所在的层int locate[MAXLEN]; //打印结点的位置int front,rear;}q;int i,j,k;int nLocate;j 1;k 0;q.front 0;q.rear …

【CodeForces - 245C 】Game with Coins (思维,贪心)

题干&#xff1a; Two pirates Polycarpus and Vasily play a very interesting game. They have n chests with coins, the chests are numbered with integers from 1 to n. Chest number i has aicoins. Polycarpus and Vasily move in turns. Polycarpus moves first. Du…

【CodeForces - 246D】Colorful Graph (暴力,图,存边,STL)

题干&#xff1a; Youve got an undirected graph, consisting of n vertices and m edges. We will consider the graphs vertices numbered with integers from 1 to n. Each vertex of the graph has a color. The color of the i-th vertex is an integer ci. Lets consi…

android 动态换肤框架,GitHub - ss520k/Android-Skin-Loader: 一个通过动态加载本地皮肤包进行换肤的皮肤框架...

Android-Skin-Loader更新日志导入到Android Studio&#xff0c;使用gradle构建皮肤包(见7. 皮肤包是什么&#xff1f;如何生成&#xff1f;)(2015-12-02)解决Fragment换肤在某些版本的support-v4包下失效的问题(感谢javake同学)(2015-12-02)对textColor加入selector类型的资源的…

【CodeForces - 349A】Cinema Line (贪心(其实不是贪心),乱搞)

题干&#xff1a; The new "Die Hard" movie has just been released! There are n people at the cinema box office standing in a huge line. Each of them has a single 100, 50 or 25 ruble bill. A "Die Hard" ticket costs 25 rubles. Can the boo…

android 获取默认程序图标,android – PackageManager.getApplicationIcon()返回默认图标?...

我刚想通了.有一个PackageManager.getDefaultActivityIcon()方法返回一个Drawable.如果Drawable的Bitmap与应用程序图标Drawable的Bitmap匹配,则它是默认图标.PackageManager pm context.getPackageManager();Drawable icon pm.getApplicationIcon(apk.package_name);Drawabl…

【CodeForces - 255A】Greg's Workout (水题)

题干&#xff1a; Greg is a beginner bodybuilder. Today the gym coach gave him the training plan. All it had was n integers a1, a2, ..., an. These numbers mean that Greg needs to do exactly n exercises today. Besides, Greg should repeat the i-th in orde…

android吸附菜单,Android仿微博、人人Feed详情页吸附导航栏

仿微博、人人的feed详情页面&#xff1a;Listview上下滑动&#xff0c;导航栏view可吸附在顶部的效果。一、实现效果上图&#xff1a;效果图.gif欢迎拍砖&#xff0c;拍拍更进步。没有对比&#xff0c;怎么会有伤害&#xff0c;下面是 微博、人人的Feed详情页&#xff1a;微博、…

android 居右属性,使用layoutDirection属性设置布局靠左或靠右

通过设置layoutDirection属性值为mx.core.LayoutDirection.RTL(右到左)或mx.core.LayoutDirection.LTR(左到右)&#xff0c;使布局为靠左或靠右(如下图)。该属性可设置3种值&#xff0c;LayoutDirection.RTL、LayoutDirection.LTR和null(ILayoutDirectionElement时)/undefined(…

【CodeForces - 255B】Code Parsing(思维,字符串)

题干&#xff1a; Little Vitaly loves different algorithms. Today he has invented a new algorithm just for you. Vitalys algorithm works with string s, consisting of characters "x" and "y", and uses two following operations at runtime: …

【CodeForces - 255C】Almost Arithmetical Progression (dp,离散化)

题干&#xff1a; Gena loves sequences of numbers. Recently, he has discovered a new type of sequences which he called an almost arithmetical progression. A sequence is an almost arithmetical progression, if its elements can be represented as: a1  p, wh…

Android手机mm开头的大文件,[2018年最新整理]2Android源代码编译命令m和mm和mmm以及make分析.doc...

[2018年最新整理]2Android源代码编译命令m和mm和mmm以及make分析老罗的新浪微博&#xff1a;/shengyangluo&#xff0c;欢迎关注&#xff01;在前文中&#xff0c;我们分析了Android编译环境的初始化过程。Android编译环境初始化完成后&#xff0c;我们就可以用m/mm/mmm/make命…

【CodeForces - 349C】Mafia(思维模拟,优秀的二分)

题干&#xff1a; One day n friends gathered together to play "Mafia". During each round of the game some player must be the supervisor and other n - 1 people take part in the game. For each person we know in how many rounds he wants to be a pl…

android新材料设计,android - 如何实现新材料BottomAppBar为BottomNavigationView - SO中文参考 - www.soinside.com...

解决了基本上&#xff0c;而不是试图迫使菜单的资源&#xff0c;我需要的布局&#xff0c;我用这个方法&#xff0c;而不是&#xff0c;我只是把使用“空”元素作为dglozano建议BottomAppBar内的LinearLayout。使用?attr/selectableItemBackgroundBorderless我也能做到这一点实…

【CodeForces - 1A】Theatre Square(水题,几何)(CODEFORCES,梦的开始)

题干&#xff1a; Theatre Square in the capital city of Berland has a rectangular shape with the size n  m meters. On the occasion of the citys anniversary, a decision was taken to pave the Square with square granite flagstones. Each flagstone is of the …

html教程是语音版,【HTML教程】HTML 语言简介

标签是一个容器标签&#xff0c;用于放置网页的主体内容。浏览器显示的页面内容&#xff0c;都是放置在它的内部。它是的第二个子元素&#xff0c;紧跟在后面。网页标题hello world