51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题
51nod 1118 机器人走方格:

思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果,
时间复杂度O(m*n)。运算量1000*1000 = 1000000,很明显不会超时。
递推式子:dp[i][j] = dp[i-1][j] + dp[i][j-1]。 dp[i][j]表示当规格为i*j (m = i && n = j) 时本题的结果。
直接上代码:
#include <stdio.h>
#include <string.h>
#define rep(i,o,u) for(int i = o;i <= u; i++)
long long a[][];
int main(){
int n,m;
scanf("%d%d",&n,&m);
memset(a,,sizeof(a));
a[][] = ;
rep(i,,n){
rep(j,,m){
a[i][j] = (a[i][j] + a[i-][j]+a[i][j-])%;
}
}
printf("%d\n", a[n][m]);
return ;
}
51nod 1119 机器人走方格 V2:

分析:这题和上题的不同之处在于数据量变大了。如果还按上题的动态规划。时间复杂度O(m*n)。
运算量将变成10^6*10^6 = 10^12,很明显会超时。
这时我们需要换一条思路。
一般没有思路的题我都会去找规律,如果找不出规律一般都是需要用到特殊的数据结构或者自己能力不够。
这题也不例外,我开始了找规律,我发现1118,也就是上面那个题可以得到这个题的部分数据。
好吧我们先做个试验把,我修改了一下1118的代码,输出了 m = [2,6] & n = [2,6]范围内的数据如下:

然后惊讶的发现这不就是杨辉三角吗?
想起杨辉三角的定义就是左边和上面两个值之和。
我们知道杨辉三角有一个组合数的性质。
然后我们观察这些数据可以发现dp[i][j] = C(m+n-2,m-1) = C(m+n-2,n-1)。
然后这题就迎刃而解了,转化成了组合数问题。
可是求组合数也有一个问题?因为数字过大所以需要取模,我们知道负数取模需要用到逆元。
如果不知道逆元,就看一下这个:点击这里转到博客。
然后就可以上代码了:
#include <bits\stdc++.h>
using namespace std;
typedef long long ll;
#define Mod 1000000007 //求逆元模板 begin
ll gcd(ll a,ll b,ll &x,ll &y){
if (b==){
x=,y=;
return a;
}
ll q=gcd(b,a%b,y,x);
y-=a/b*x;
return q;
}
ll ni(ll m,ll n) {
ll x = ,y = ;
gcd(n,m,x,y);
if(y > ) return y;
else return n+y;
} //求逆元模板 end ll C(ll a,ll b){
ll num1 = ,num2 = ; //求组合数的分子
for(int i = a-b+;i <= a; i++){
num1 = (num1*i)%Mod;
} //求组合数的分母
for(int i = ;i <= b; i++){
num2 = (num2*i)%Mod;
} //求 (分子num1/分母num2)%Mod 可以转化为 (num1*num2的逆元)%Mod
//如果想知道逆元的原理可以看一下我写的另一篇博客 http://www.cnblogs.com/zhangjiuding/p/7546158.html
cout << (num1*ni(num2,Mod))%Mod << endl;
}
int main() {
int m,n;
cin >> m >> n;
C(m+n-,n-);
return ;
}
51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题的更多相关文章
- 51nod 1119【杨辉三角】
思路: = =杨辉三角的应用,组合数的应用: C(N+M,N); 逆元一发,费马小定理,OK. #include <stdio.h> #include <string.h> # ...
- HDU——1799循环多少次(杨辉三角/动态规划/C(m,n)组合数)
循环多少次? Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 51nod 1031+斐波那契和杨辉三角的一些基础知识
直接斐波那契... #include<stdio.h> #include<queue> #include<string.h> #include<iostrea ...
- 1119 机器人走方格 V2(组合)
1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于 ...
- 51nod 1119 机器人走方格 V2
1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少 ...
- 51nod-1119 1119 机器人走方格 V2(组合数学+乘法逆元+快速幂)
题目链接: 1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很 ...
- 1119 机器人走方格 V2 (组合数学)
M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mod 10^9 + 7的结果. Input 第1行,2个数M,N,中间用空格隔开 ...
- 1119 机器人走方格 V2
1119 机器人走方格 V2 基准时间限制:1 秒 空间限制:131072 KB M * N的方格,一个机器人从左上走到右下,只能向右或向下走.有多少种不同的走法?由于方法数量可能很大,只需要输出Mo ...
- OpenJ_Bailian 4103 踩方格(搜索 动态规划 )
题目传送门OpenJ_Bailian 4103 描述 有一个方格矩阵,矩阵边界在无穷远处.我们做如下假设:a. 每走一步时,只能从当前方格移动一格,走到某个相邻的方格上:b. 走过的格子立 ...
随机推荐
- 王爽汇编习题2.2(1):给定地址段为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为____到____
此题解题背景默认为8080型CPU,地址总线为16根.(8080-16,8086-20,8088-20,80286-24,80386-32) 16根地址总线寻址能力:(2 ** 16) / 1024 ...
- h5drag事件
在拖动目标上触发事件 (源元素):ondragstart - 用户开始拖动元素时触发ondrag - 元素正在拖动时触发ondragend - 用户完成元素拖动后触发释放目标时触发的事件:ondrag ...
- 49、html基础认识&常用标签(1)
从今天期我们进入前端的学习,先学习html,没有任何需要逻辑需要烧脑,只需要记忆.练习.练习.练习. 一.HTML初识 1.web服务本质 import socket def main(): sock ...
- Centos7.2下基于Nginx+Keepalived搭建高可用负载均衡(一.基于Keepalived搭建HA体系)
说明 本文只为方便日后查阅,不对一些概念再做赘述,网上都有很多明确的解释,也请大家先了解相关概念. 两台搭建HA的服务器是华为云上的ECS(不要忘记开通VPC,保证我们的服务器都处在一个内网环境),由 ...
- 垂直居中小记 line-height table vertical-align:middle
垂直居中分两种情况:1.父元素高度确定的单行文本 2.以及父元素高度确定的多行文本. 1.垂直居中-父元素高度确定的单行文本的竖直居中的方法是通过设置父元素的 height 和 line ...
- 自制VTP实验总结
(packet tracer模拟器) 6.1)实验拓扑 //绿色:通:橙色:不通 //sw0是根桥:全通 Pc0:ip 192.168.1.1 Pc1: ip 192.168.1.2 Pc2:ip 1 ...
- 介绍call和apply
function add(a, b) { alert(a + b); } function sub(a, b) { alert(a - b); } add.call(sub, 1,3); //4 传 ...
- python 每日一练: 读取log文件中的数据,并画图表
之前在excel里面分析log数据,简直日了*了. 现在用python在处理日志数据. 主要涉及 matplotlib,open和循环的使用. 日志内容大致如下 2016-10-21 21:07:59 ...
- 团队作业8——第二次项目冲刺(Beta阶段)第三天
BETA阶段冲刺第三天 1.当天站立式会议 2.每个人的工作 (1)昨天已完成的工作: 编写页面讨论 (2)今天计划完成的工作: 完成编写页面 (3)工作中遇到的困难: 验证码正确度 (4)每个人的贡 ...
- 201521123091 《Java程序设计》第5周学习总结
Java 第五周总结 第五周的作业. 目录 1.本章学习总结 2.Java Q&A 3.使用码云管理Java代码 4.PTA实验 1.本章学习总结 1.1 尝试使用思维导图总结有关多态与接口的 ...