UPC 2019年第二阶段我要变强个人训练赛第六场
题目描述
小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年第二阶段我要变强个人训练赛第六场的更多相关文章
- UPC 2019年第二阶段我要变强个人训练赛第十六场
传送门: [1]:UPC比赛场 [2]:UPC补题场 F.gu集合(数论) •题目描述 题目描述: Dew有一个长为n的集合S. 有一天,他想选k个不同的元素出来做游戏. 但是Dew只有两只手,所以他 ...
- 2019年第二阶段我要变强个人训练赛第八场 B.序列(seq)
传送门 B.序列(seq) •题目描述 给出一个长度为n的序列a,每次对序列进行一下的某一个操作. •输入 第一行两个整数n,q表示序列长度和操作个数. 接下来一行n个数,表示序列a. 接下来q行表示 ...
- UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十四场
A.JOIOJI •传送门 [1]:BZOJ [2]:洛谷 •思路 在一个区间(L,R]内,JOI的个数是相等的,也就是R[J]-L[J]=R[O]-L[O]=R[I]-L[I], 利用前缀和的思想, ...
- UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十六场
E: 飞碟解除器 •题目描述 wjyyy在玩跑跑卡丁车的时候,获得了一个飞碟解除器,这样他就可以免受飞碟的减速干扰了.飞碟解除器每秒末都会攻击一次飞碟,但每次只有p/q的概率成功攻击飞碟.当飞碟被成功 ...
- UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十五场
传送门 A: Colorful Subsequence •题意 给一个长为n的小写字母序列,从中选出字母组成子序列 问最多能组成多少种每个字母都不相同的子序列 (不同位置的相同字母也算是不同的一种) ...
- 备战省赛组队训练赛第六场(UPC)
传送门 外来博客题解1:戳这里 外来博客题解2:戳这里 CRWG全方位题解:戳这里
- 备战省赛组队训练赛第十七场(UPC)
upc:传送门 A: 题解[1] G: 题解[1] D,G,H,J,L 题解 by 鲁东大学
- 问题 L: An Invisible Hand - (2018年第二阶段个人训练赛第三场)
题目描述 There are N towns located in a line, conveniently numbered 1 through N. Takahashi the merchant ...
- 备战省赛组队训练赛第七场(UPC)
传送门 日文题解:戳这里
随机推荐
- [框架]eclipse搭建ssm框架 一 标签: eclipsetomcat框架 2017-03-25 21:28 1085人阅读 评论(
虽然现在也做过一些项目,但是自己从头搭起来的框架几乎没有,所以这两天自己搭了一下ssm的框架,下面写一下框架的搭建过程.并且给出增删改查四条线来方便大家熟悉代码. 环境准备 maven3.2.3 ec ...
- BZOJ4241历史研究题解
题目连接 很显然可以想到分块,用f[i][j]表示块i到块j的ans,然后发现答案一定是f[i][j] 或者其他在边角出现的数字 我们在记下g[i][j]从开头到块i中的数字j出现的次数 这样就每一次 ...
- Pyhton 单行、多行注释方法
一.python单行注释的符号 井号#常被用作单行注释符号,在代码中使用#时,它右边的任何数据都会被忽略,当做是注释.类似c++的// 二.批量.多行注释的符号 多行注释是用三引号: ”’ 注释内容 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader)
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十三章:计算着色器(The Compute Shader) 代码工程 ...
- OpenStack宣布用Kubernetes重写底层编排引擎
Mirantis是OpenStack的主要贡献者,今天他宣布将使用Kubernetes作为底层编排引擎重写其私有云平台.我们认为这是推进OpenStack和Kubernetes 社区伟大的一步. Op ...
- C++第一次作业(循环语句的使用)
一.知识点 循环结构 二.教学目的 掌握while和do...while循环语句在C++中的写法 三.教学内容 1.while语句 (1)执行顺序:先判断表达式(循环控制条件)的值,若表达式的值为tr ...
- 2019-3-25-win10-uwp-如何将像素数组转-png-文件
title author date CreateTime categories win10 uwp 如何将像素数组转 png 文件 lindexi 2019-3-25 8:53:1 +0800 201 ...
- DENSE_RANK(),允许并列名次、名次不间断,如122344456
将score按ID分组排名:dense_rank() over(partition by id order by score desc) 将score不分组排名:dense_rank() over(o ...
- Xcode4.2 本地化 总结
1 xcode4.2,如果是简体中文,把国际化的文件放到zh-Hans.lproj中就显示正常了.如果放到zh.lproj中就不可以 2 字符串 1)在项目的"supporting file ...
- java 根据秘钥,对数据进行加解密
package test; import com.alibaba.fastjson.JSONObject; import sun.misc.BASE64Decoder; import sun.misc ...