51nod 1118 机器人走方格
来源:互联网 发布:app java后端开发 编辑:程序博客网 时间:2024/04/30 15:39
因为这道题数据过大,所以如果直接用C(m,n)会发生错误,会发生溢出,而且因为除法的存在,求余运算都不能乱用了。
我开始错误的代码:
#include <iostream>typedef long long ll;const ll MODE = 1e + 7;ll C(ll a, ll b){ ll res = 1; for (ll i = 1; i <= b; ++i) { res = (res * (a - i + 1) / i ); // res /= i; std::cout << res << std::endl; } // std::cout << res << std::endl; std::cout << res << std::endl; return res % MODE;}int main(){ ll r, c; std::cin >> r >> c; std::cout << C(r + c - 2, r - 1) << std::endl; return 0;}
然后可以用动态规划啊。嘿嘿
#include <iostream>typedef long long ll;const int MAX = 1e3 + 5;const int MODE = 1e9 +7;ll dp[MAX];int main(){ int n, m; std::cin >> n >> m; for (int i = 1; i <= m; ++i) dp[i] = 1; for (int i = 2; i <= n; ++i) { for (int j = 2; j <= m; ++j) { dp[j] = (dp[j] + dp[j - 1]) % MODE; } } std::cout << dp[m] << std::endl; return 0;}dp[i]表示走到第几列的方法。在for循环的过程中,dp[i]表示在第i列的当前行的方法数,dp[i]等于上一列的方法数,加上上一行的方法数,因为在循环的过程中,dp[i]表示的是当前行列交点位置的方法数,就等于dp[i](上一行i列的方法数)+dp[i-1](上一列第i行的方法数相加)。
0 0
- 51nod 1118 机器人走方格
- 51nod 1118 机器人走方格
- 51nod-【1118 机器人走方格】
- 51nod 1118 机器人走方格
- 51nod-1118 机器人走方格
- 【51Nod】1118 机器人走方格
- 51Nod 1118 机器人走方格
- 51Nod-1118-机器人走方格
- 51Nod-1118 机器人走方格
- 51nod 1118 机器人走方格
- 51 Nod 机器人走方格
- 机器人走方格 51Nod
- 51nod 1118 机器人走方格 & 1119 机器人走方格 V2(排列组合)
- 51nod 1118 机器人走方格 (排列组合+乘法逆元!!!)
- 51Nod-1118-机器人走方格
- 51nod 1118 机器人走方格(简单DP)
- 51Nod 1118 机器人走方格 (排列组合)
- 51nod 1118 机器人走方格(组合数学)
- 在EA中的UML图中插入设计模式的模板
- java Static的bug
- MySQL体系结构
- elasticsearch小记之—— unmapped_type的使用
- 分类和聚类的区别
- 51nod 1118 机器人走方格
- 动态规划要诀
- Hibernate一对一关系映射
- java端口扫描器
- Spring自动扫描装配bean
- LeetCode 50 - Pow(x, n)
- 工程导入 GIT 源代码
- filezilla
- C++容器详解