传送门

A.上学路线

 题目描述
小D从家到学校的道路结构是这样的:由n条东西走向和m条南北走向的道路构成了一个n*m的网格,每条道路都是单向通行的(只能从北向南,从西向东走)。
已知小D的家在网格的左上角,学校在网格的右下角。
问小D从他的家到学校一共有多少种不同的上学路线。
(配图如下)
输入
两个正整数n和m,意义如题目所述。 输出
小D上学路线数量,结果对1000000007取余。

题目描述

 样例输入

 样例输出
 

样例输入输出

思路一(递推):

 ll dp[maxn][maxn];///dp[i][j]:从点(i,j)到(n,m)的路线个数

  初始化dp[n][m]=1;

AC代码:

 #include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+;
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
const int MOD=; int n,m;
ll dp[maxn][maxn]; ll Solve()
{
mem(dp,);
for(int i=n;i >= ;--i)
{
for(int j=m;j >= ;--j)
{
if(i == n && j == m)
dp[i][j]=;
else
dp[i][j]=(dp[i+][j]+dp[i][j+])%MOD;
}
}
return dp[][]%MOD;
}
int main()
{
scanf("%d%d",&n,&m);
printf("%lld\n",Solve()); return ;
}

思路二(记忆化搜索 by mxl):

  由题意可知,一共向下走了 n-1 步;

  那么对于第 i 列可能向下走连续的 0,1,2,...,n-1 步;

ll dp[maxn][maxn];///dp[i][j]:第i列向下走连续的j步含有的总方案数

  初始化dp为-1;

AC代码:

 #include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+;
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
const int MOD=; int n,m;
ll dp[maxn][maxn];///dp[i][j]:第i列向下走连续的j步含有的总方案数 ll DFS(int cur,int cnt)///第cur列最多向下走cnt步
{
if(cur > m)
return cnt == ? :; if(dp[cur][cnt] != -)///记忆化搜索
return dp[cur][cnt]; ll ans=;
for(int i=;i <= cnt;++i)///第cur列向下走i步
ans=(ans+DFS(cur+,cnt-i))%MOD; dp[cur][cnt]=ans;
return ans;
}
ll Solve()
{
mem(dp,-);
return DFS(,n-)%MOD;
}
int main()
{
scanf("%d%d",&n,&m);
printf("%lld\n",Solve()); return ;
}

  

UPC 2019年第二阶段我要变强个人训练赛第六场的更多相关文章

  1. UPC 2019年第二阶段我要变强个人训练赛第十六场

    传送门: [1]:UPC比赛场 [2]:UPC补题场 F.gu集合(数论) •题目描述 题目描述: Dew有一个长为n的集合S. 有一天,他想选k个不同的元素出来做游戏. 但是Dew只有两只手,所以他 ...

  2. 2019年第二阶段我要变强个人训练赛第八场 B.序列(seq)

    传送门 B.序列(seq) •题目描述 给出一个长度为n的序列a,每次对序列进行一下的某一个操作. •输入 第一行两个整数n,q表示序列长度和操作个数. 接下来一行n个数,表示序列a. 接下来q行表示 ...

  3. UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十四场

    A.JOIOJI •传送门 [1]:BZOJ [2]:洛谷 •思路 在一个区间(L,R]内,JOI的个数是相等的,也就是R[J]-L[J]=R[O]-L[O]=R[I]-L[I], 利用前缀和的思想, ...

  4. UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十六场

    E: 飞碟解除器 •题目描述 wjyyy在玩跑跑卡丁车的时候,获得了一个飞碟解除器,这样他就可以免受飞碟的减速干扰了.飞碟解除器每秒末都会攻击一次飞碟,但每次只有p/q的概率成功攻击飞碟.当飞碟被成功 ...

  5. UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十五场

    传送门 A: Colorful Subsequence •题意 给一个长为n的小写字母序列,从中选出字母组成子序列 问最多能组成多少种每个字母都不相同的子序列 (不同位置的相同字母也算是不同的一种) ...

  6. 备战省赛组队训练赛第六场(UPC)

    传送门 外来博客题解1:戳这里 外来博客题解2:戳这里 CRWG全方位题解:戳这里

  7. 备战省赛组队训练赛第十七场(UPC)

    upc:传送门 A: 题解[1] G: 题解[1] D,G,H,J,L 题解 by 鲁东大学

  8. 问题 L: An Invisible Hand - (2018年第二阶段个人训练赛第三场)

    题目描述 There are N towns located in a line, conveniently numbered 1 through N. Takahashi the merchant ...

  9. 备战省赛组队训练赛第七场(UPC)

    传送门   日文题解:戳这里

随机推荐

  1. onethink上传到服务器(或者迁移)后台登录验证码错误问题

    修改Application\User下面的配置文件config.php, 改成对应服务器上的参数 define('UC_DB_DSN', 'mysqli://root:root@127.0.0.1:3 ...

  2. vue中element-ui添加按钮

    <div v-for="(v,i) in list"> <el-form label-width="120px" size="sma ...

  3. database homework3

    查询所有大于60分的学生的姓名和学号 (DISTINCT: 去重) mysql> select student.sname,student.sid,score.number from stude ...

  4. 用五种不同的布局方式实现“左右300px中间自适应”的效果

    float浮动 <section class="layout float"> <style media="screen"> .layou ...

  5. js(jquery)鼠标移入移出事件时,出现闪烁、隐藏显示隐藏显示不停切换的情况

    <script> $(".guanzhu").hover(function(){ $(".weixinTop").show(); },functio ...

  6. laravle 事务

    DB::beginTransaction(); try{     $name = 'abc';     $result1 = Test::create(['name'=>$name]);     ...

  7. TIJ——Chapter Four:Controlling Execution

    同上一章,本章依然比较简单.基础,因此只是做一些总结性的笔记. 1. 不像C和C++那样(0是假,非零为真),Java不允许用一个数字作为boolean值. 2. C中,为了给变量分配空间,所有变量的 ...

  8. JavaScriptBreak 语句 continue 语句

    break 语句用于跳出循环. continue 用于跳过循环中的一个迭代. Break 语句 我们已经在本教程之前的章节中见到过 break 语句.它用于跳出 switch() 语句. break ...

  9. P2532 [AHOI2012]树屋阶梯

    题目:P2532 [AHOI2012]树屋阶梯 思路: 打表之后不难看出是裸的Catalan数.简单证明一下: 对于任意一种合法方案,都可以表示为在左下角先放一个\(k*(n+1-k),k\in[1, ...

  10. js+canvas黑白棋

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...