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[1002][1002];
int main(){int n,m;scanf("%d%d",&n,&m);memset(a,0,sizeof(a));a[1][1] = 1;rep(i,1,n){rep(j,1,m){a[i][j] = (a[i][j] + a[i-1][j]+a[i][j-1])%1000000007;}}printf("%d\n", a[n][m]);return 0;
}

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==0){x=1,y=0;return a;}ll q=gcd(b,a%b,y,x);y-=a/b*x;return q;
}
ll ni(ll m,ll n) {ll x = 0,y = 0;gcd(n,m,x,y);if(y > 0) return y;else return n+y;
}//求逆元模板 endll C(ll a,ll b){ll num1 = 1,num2 = 1;//求组合数的分子for(int i = a-b+1;i <= a; i++){num1 = (num1*i)%Mod;}//求组合数的分母for(int i = 1;i <= b; i++){num2 = (num2*i)%Mod;}//求 (分子num1/分母num2)%Mod 可以转化为 (num1*num2的逆元)%Mod//如果想知道逆元的原理可以看一下我写的另一篇博客  http://www.cnblogs.com/zhangjiuding/p/7546158.htmlcout << (num1*ni(num2,Mod))%Mod << endl;
}
int main() {int m,n;cin >> m >> n;C(m+n-2,n-1);return 0;
}

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

  1. Fibonacci数列 递归 杨辉三角 动态规划

    这篇帖子主要是介绍 递归 与 动态规划 之间是如何转换的, 什么是递归估计不用多说,那么什么是 动态规划呢? 我理解的动态规划就是: 能够避免 直接 递归实现 中出现的重复运算的技术就是动态规划. 这 ...

  2. 杨辉三角java代码_【LeetCode】118. 杨辉三角(Pascal#x27;s Triangle)解题思路

    题目如下(题目链接戳我): 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 备注:在杨辉三角中,每个数是它左上方和右上方的数的和.示例: 输入: 5 输出: [[1],[1, ...

  3. c语言编程杨辉三角前八行思路,C语言----(杨辉三角)

    用C语言编程打印出杨辉三角的前10行.如下图所示: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 ... ... 解法1: ...

  4. 动态规划应用--“杨辉三角”最短路径 LeetCode 120

    文章目录 1. 问题描述 2. DP算法代码 3. LeetCode 120 三角形最小路径和 1. 问题描述 对"杨辉三角"进行一些改造.每个位置的数字可以随意填写,经过某个数字 ...

  5. leetcode 刷题 118. 杨辉三角解题思路

    给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出: [      [1],     [1,1],   ...

  6. LeetCode动态规划 杨辉三角

    Given an integer numRows, return the first numRows of Pascal's triangle. In Pascal's triangle, each ...

  7. 杨辉三角python语言程序思路_python杨辉三角方法的实例介绍

    程序输出需要实现如下效果:[1] [1,1] [1,2,1] [1,3,3,1] ...... 方法:迭代,生成器def triangles() L = [1] while True: yiled L ...

  8. 左对齐杨辉三角python_python实现杨辉三角思路

    程序输出需要实现如下效果: [1] [1,1] [1,2,1] [1,3,3,1] ...... 方法:迭代,生成器 实现逻辑: 1.由于yield为生成器中断输出,所以有了第一个次输出为[1] 2. ...

  9. python实现杨辉三角思路_Python极简代码实现杨辉三角示例代码

    Python极简代码实现杨辉三角示例代码 杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列. 把每一行看做一个list,写一个generator,不断输出下一行的list ...

最新文章

  1. KOA 在typescript下编译找不到模板render和session错误的解决
  2. leetcode算法题--设计链表
  3. BackTrack5 R2快速更新至BackTrack5 R3
  4. MySQL 8.0 新特性之统计直方图
  5. oracle 12.1的那些坑
  6. 直播 | ICML 2021论文解读:具有局部和全局结构的自监督图表征学习
  7. 还在为周会发愁?你需要这13篇最新论文 | 本周值得读
  8. C++语言基础 —— 循环结构
  9. 【Flink】kafka Response from server for which there are no in-flight requests NETWORK_EXCEPTION
  10. BERT模型实战之多文本分类(附源码)
  11. realtek网卡mac硬改工具_浅谈设备异常、手机硬改参数
  12. iOS NSData简单解析
  13. 暴风影音2009 Real插件无法下载安装问题解决
  14. 远程访问内网服务器使用FRP实现内网穿透
  15. 创建一个字体wx.Font
  16. HDU 1859 最小长方形
  17. 最满意的10款PC 软件分享
  18. TP与laravel简介
  19. 计算机网络管理员绩效考核,网络工程师专业考核方案
  20. 3G门户手机浏览器试用感受

热门文章

  1. Java黑皮书课后题第10章:10.3(MyInteger类)设计一个名为MyInteger的类
  2. td不允许自己扩展_一定要抱着大A不放手吗?
  3. 4键电子手表说明书_家有破壁机的要收藏,教你4道早餐食谱,细腻香甜,比喝豆浆舒服...
  4. Exif文件格式描述
  5. 简述systemd的新特性及unit常见类型分析、使用systemd管理编译安装的nginx
  6. 51 Nod 1509 加长棒(巧妙的隔板法计数)
  7. 运营系统的前世今生(1)
  8. Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
  9. 纯CSS美化单复选框(checkbox、radio)
  10. RxSwift之深入解析如何创建观察者Observer