51nod 1118 机器人走方格
2016-03-05 13:51
218 查看
因为这道题数据过大,所以如果直接用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行的方法数相加)。
相关文章推荐
- 索引失效(存在索引但不使用索引)
- js跨域及解决方案
- HDU 3068 最长回文(求最长回文子串)
- 第二周项目二 标准体重
- wampum打开localhost时没有前缀,图标黄色怎么办?
- 分享一个生产环境中利用SVN上线代码的脚本
- launcher/notification icon的尺寸标准
- mysql插入数据,获取最新插入的ID(自增列)
- 当下互联网创业公司采用增量模型的原因
- HDU 3068 最长回文(求最长回文子串)
- Cube(规律)
- hdoj--1220--Cube(数学推导)
- AFNetworking使用
- 一种错误信息传递转义方法、装置和系统
- uva11008
- js、 数组
- 创建二叉排序树,二叉树的六种遍历
- hdoj--1220--Cube(数学推导)
- 利用vba将excel中的图片链接直接转换为图片
- poj Subsequence 3061 (高效&DP)