方案数量

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描写叙述

给出一个N*M的棋盘。左下角坐标是(0。0)。右上角坐标是(N,M),规定每次仅仅能向上或者向右走。问从左下角走到右上角,一共同拥有多少种方案。上图是一个4*3的棋盘。

输入
多组測试数据。

每组输入两个整数N,M(0≤N,M≤30)。

输入0,0时表示结束。不做不论什么处理。

输出
对于每组測试数据,输出相应的方案数。

例子输入
4 3
2 2
0 0
例子输出
35
6

分析:这道题有2种做法。

一、推公式

ans = C(n+m, n)。由于从左下角走到右上角一共要走n+m步。往上要走n步,假设用1表示向上走。用0表示向右走。则相当于给n+m个数进行赋值,当中n个数被赋值为1,求有多少种赋值方法。仅仅需从n+m个数里挑出n个,有C(n+m, n)中挑选办法。

#include <cstdio>

long long get_ans(long long a, long long x) {
long long ans = 1;
for(long long i = 1; i <= a; i++)
ans = ans * (x - i + 1) / i;
return ans;
} int main() {
long long n, m;
while(~scanf("%lld%lld", &n, &m) && (n + m)) {
printf("%lld\n", get_ans(n, n + m));
}
return 0;
}

二、递推

由于假设要到(n, m)点,要么从(n-1, m)点过来,要么从(n, m-1)点过来。设dp[i][j]表示从(0, 0)到(i, j)有多少种方案,

则dp[i][j] = dp[i-1][j] + dp[i][j-1],最后输出dp[n][m]就是答案。

#include <cstdio>
#include <cstring> const int N = 32;
long long dp[N][N]; void get_ans() {
memset(dp, 0, sizeof(dp));
for(int i = 0; i < 31; i++)
dp[i][0] = dp[0][i] = 1;
for(int i = 1; i < 31; i++)
for(int j = 1; j < 31; j++)
dp[i][j] = dp[i-1][j] + dp[i][j-1];
} int main() {
get_ans();
int n, m;
while(~scanf("%d%d", &n, &m) && (n + m)) {
printf("%lld\n", dp[n][m]);
}
return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

NYOJ 1076 计划数(公式 要么 递归)的更多相关文章

  1. 基于Extjs的web表单设计器 第七节——取数公式设计之取数公式的使用

    基于Extjs的web表单设计器 基于Extjs的web表单设计器 第一节 基于Extjs的web表单设计器 第二节——表单控件设计 基于Extjs的web表单设计器 第三节——控件拖放 基于Extj ...

  2. ACM1229_还是A+B(求A的第K位的数公式:A%((int)(pow(10,K)))

    #include<stdio.h> #include<math.h> int main() { int A,k,B,sum,c,d; while(scanf("%d% ...

  3. E - 不容易系列之(4)――考新郎 错排数公式

    国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的:  首先,给每位新娘打扮得几乎一模一 ...

  4. python-函数4(递归、高阶函数)

    python-函数4(递归.高阶函数) 递归 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 递归特性: 1. 递归必须有一个明确的结束条件 2. 每次进入更深一 ...

  5. Master公式计算递归时间复杂度

    我们在算递归算法的时间复杂度时,Master定理为我们提供了很强大的便利! Master公式在我们的面试编程算法中除了BFPRT算法的复杂度计算不了之外,其他都可以准确计算! 这里用求数组最大值的递归 ...

  6. 剥下“java.lang.OutOfMemoryError: unable to create new native thread”的外衣 创建线程数公式(MaxProcessMemory - JVMMemory – ReservedOsMemory)

    剥下“java.lang.OutOfMemoryError: unable to create new native thread”的外衣 星期一早上到了公司,据称产品环境抛出了最可爱的异常—OutO ...

  7. HDU3183A Magic Lamp,和NYOJ最大的数一样

    A Magic Lamp Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  8. nyoj 305 表达式求值 (递归)

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min ...

  9. master公式 ------ 求递归情况下的时间复杂度

    剖析递归行为和递归行为时间复杂度的估算一个递归行为的例子T(N) = a*T(N/b) + O(N^d)1) log(b,a) > d -> 复杂度为O(N^log(b,a))2) log ...

随机推荐

  1. Mahjong tree (hdu 5379 dfs)

    Mahjong tree Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot ...

  2. iOS_04_数据类型、常量、变量

    一.数据 1.什么是数据 * 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据,图片数据,视频数据,还有聊天QQ产生的文 ...

  3. 最短路算法详解(Dijkstra/SPFA/Floyd)

    新的整理版本版的地址见我新博客 http://www.hrwhisper.me/?p=1952 一.Dijkstra Dijkstra单源最短路算法,即计算从起点出发到每个点的最短路.所以Dijkst ...

  4. ARM+linux学习过程(1)虚拟机下ubuntu上网

    总结:(1)通过bridge方式也可以实现ubuntu上网(只要PC物理网卡能上网),可以实现ping通主机和开发板 (2)要想上网简单上网,可以通过nat方式,在vmware中设置为nat方式,选择 ...

  5. WM_CAP_DRIVER_CONNECT

    WM_CAP_DRIVER_CONNECT //ActiveX ---->OnCreate m_pit.Create(IDD_CAM_DIALOG,this);  CRect rc;  this ...

  6. 【u237】分数化小数

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 写一个程序,输入一个形如N/D的分数(N是分子,D是分母),输出它的小数形式.如果小数有循环节的话,把 ...

  7. [RxJS] Conclusion: when to use Subjects

    As a conclusion to this course about RxJS subjects, let's review when and why should you use them. F ...

  8. 那些移动端web踩过的坑2

    原文链接:https://geniuspeng.github.io/2018/04/26/mobile-issues2/ 坑是无穷无尽的,嗯-长江后坑推前坑~~ 关于音频自动播放 H5的audio标签 ...

  9. 【48.47%】【POJ 2524】Ubiquitous Religions

    Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 32364 Accepted: 15685 Description There a ...

  10. Spring Tool Suite(STS)加速

    Java开发首选技术是Spring,使用Spring技术首选的开发工具是STS,STS有许多加速spring开发的提示和快捷方式,并将spring的最新技术通过STS快速简单的传递给用户. 但是STS ...