http://acm.nyist.net/JudgeOnline/problem.php?pid=1076

方案数量

时间限制: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
解题思路A:ans = C(n+m, n)。因为从左下角走到右上角一共要走n+m步,往上要走n步,如果用1表示向上走,用0表示向右走,则相当于给n+m个数进行赋值,其中n个数被赋值为1,求有多少种赋值方法。只需从n+m个数里挑出n个,有C(n+m, n)中挑选办法。
代码:
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; #define ll long long ll Permutation(ll a,ll x); int main(){
ll m,n;
while(scanf("%lld %lld",&m,&n),m||n){
printf("%lld\n",Permutation(m+n,n));
}
return ;
}
ll Permutation(ll a,ll x){
ll ans=;
for(ll i=;i<=x;i++) ans=ans*(a-i+)/i;
return ans;
}

这里想提一点就是,虽然只有部分地方必须longlong,但是类型转换要耗不少时间,故而采取所有地方都使用longlong。

解题思路B:因为如果要到(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 <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; #define ll long long
#define N 35 ll dp[N][N]; void GetAns(); int main(){
GetAns();
int m,n;
while(scanf("%d %d",&m,&n),m||n){
printf("%lld\n",dp[m][n]);
}
return ;
}
void GetAns(){
int m=,n=;
dp[][]=;
for(int z=;z<=;z++){
for(int i=;i<=n;i++){
int j=z-i;
if(j>m) continue;
dp[i][j]=;
if(i) dp[i][j]+=dp[i-][j];
if(j) dp[i][j]+=dp[i][j-];
}
}
}

nyoj1076-方案数量 【排列组合 dp】的更多相关文章

  1. [Bzoj3193][JLOI2013]地形生成 (排列组合 + DP)

    3193: [JLOI2013]地形生成 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 459  Solved: 223[Submit][Status ...

  2. HDU 5816 状压DP&排列组合

    ---恢复内容开始--- Hearthstone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java ...

  3. ACdream 1412 DP+排列组合

    2-3 Trees Problem Description 2-3 tree is an elegant data structure invented by John Hopcroft. It is ...

  4. LightOJ1005 Rooks(DP/排列组合)

    题目是在n*n的棋盘上放k个车使其不互相攻击的方案数. 首先可以明确的是n*n最多只能合法地放n个车,即每一行都指派一个列去放车. dp[i][j]表示棋盘前i行总共放了j个车的方案数 dp[0][0 ...

  5. 【BZOJ】2111: [ZJOI2010]Perm 排列计数 计数DP+排列组合+lucas

    [题目]BZOJ 2111 [题意]求有多少1~n的排列,满足\(A_i>A_{\frac{i}{2}}\),输出对p取模的结果.\(n \leq 10^6,p \leq 10^9\),p是素数 ...

  6. 2017ACM暑期多校联合训练 - Team 8 1011 HDU 6143 Killer Names (容斥+排列组合,dp+整数快速幂)

    题目链接 Problem Description Galen Marek, codenamed Starkiller, was a male Human apprentice of the Sith ...

  7. bzoj 3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛——前缀和优化dp / 排列组合

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398 好简单呀.而且是自己想出来的. dp[ i ]表示最后一个牡牛在 i 的方案数. 当前 ...

  8. Codeforces 140E(排列组合、dp)

    要点 主要学到的东西:一个序列染色,相邻不染同色,恰用\(j\)种颜色的1.模式数.2.方案数.3.具体染色数. 从大的思路上来讲:先dp预处理出每一层的模式数:\(f[i][j]\)表示\(i\)个 ...

  9. G.subsequence 1(dp + 排列组合)

    subsequence 1 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 You are ...

随机推荐

  1. 学习笔记之数据库Database

    SQL@Wiki http://en.wikipedia.org/wiki/SQL 一篇文章,掌握所有开源数据库的现状 - AI前线 https://mp.weixin.qq.com/s?__biz= ...

  2. appium 3-31603调试分析方法

    1.Appium Log 清晰记录了所有的请求和结果 @Test public void testDebug() throws InterruptedException,IOException{ Mo ...

  3. shell 8printf

    printf printf使用引用文本或空格分隔的参数,外面可以在printf中使用格式化字符串,还可以制定字符串的宽度.左右对其方式等.printf不会像echo自动添加换行符,因此需要手动添加\n ...

  4. 关于UC、火狐、谷歌浏览器屏蔽布局中广告的解决办法

     关于UC浏览器屏蔽了广西人才网的名企.品牌.热点的logo,是因为当成广告过滤掉了,以后div的class和id不能以“ad”开头.这可能只是其中一个规则,adxxxx是可以的,不能是adXxxx, ...

  5. GitLab更新远程分支信息

    项目开发中,当远程分支有变动,有人增加或删除了某些分支,而自己本地没有及时自动刷新出来分支的时候,可以用以下命令来更新以下分支信息 git fetch origin --prune 恩,就酱-

  6. [UE4GamePlay架构(九)GameInstance(转)

    GameInstance这个类可以跨关卡存在,它不会因为切换关卡或者切换游戏模式而被销毁.然而,GameMode和PlayController就会再切换关卡或者游戏模式时被引擎销毁重置,这样他们里面的 ...

  7. Windows环境下多版本JDK切换

    因为有切换多个版本的JDK需求,但是本机的JDK安装比较混乱(因为不是我最先使用的),所以出现了一些问题在这里记录下.本来我以为只需要修改环境变量中的JAVA_HOME环境路径即可,如果没有配置JAV ...

  8. Web 数据源

    问题描述: ClassCastException:类型转换异常 问题代码: private static LinkedList<Connection> pool = (LinkedList ...

  9. Python3 open()函数参数

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=No ...

  10. CSS宽度高度的百分比取值基于谁

    width=num% , height=num% 基于以下几点 1. 若元素不存在定位: 则基于直接父元素的宽高度 2. 若元素存在定位 且 定位为 relative, 则也基于直接父元素的宽高度 3 ...