HDU 1978 How many ways
2016-07-07 14:29
344 查看
题目分析
一道简单的动态规划题目,首先状态可能是格子上的每个点了,状态转移方程肯定就是每个点可以到达的每个点了。但是数量很大,因此状态转移的每一步均要取模,同时初始化的时候我搞错了,并不是所有的地方都初始化为0,而是除了起点之外的其他点初始化为0,起点初始化为1.#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 105; const int MOD = 10000; int maze[maxn][maxn]; int dp[maxn][maxn]; int T,n,m; bool judge(int x,int y) { if(x < 1 || x > n || y < 1 || y > m) return false; return true; } int main() { scanf("%d", &T); while(T--) { scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) scanf("%d", &maze[i][j]); memset(dp,0,sizeof(dp)); dp[1][1] = 1; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) { for(int k = 0; k <= maze[i][j]; k++) { for(int kk = 0; kk <= maze[i][j]-k; kk++) { if(!k && !kk) continue; if(judge(i+k, j+kk)) dp[i+k][j+kk] = (dp[i+k][j+kk] + dp[i][j])%MOD; } } } } printf("%d\n", dp [m]); } return 0; }
相关文章推荐
- android developer tiny share-20160627
- android developer tiny share-20160627
- Android微信支付支付失败-1等问题-脱坑指南
- 哈希表
- linux 环境搭建步骤
- 程序员数学——最小二乘法,线性拟合(一)
- 关于合拼视频和音频
- Android开发中API的查看方法
- for,foreach和iterator的区别
- NSMutableArray交换数组元素位置的方法
- 引领移动协同需求Cnskype结合微信企业号推出企业办公、通讯整合方案
- 水平触发与边缘触发i
- appium python api使用实例
- mysql 导入导出
- android隐藏关闭软键盘
- 自定义ViewGroup学习(LinearLayout的布局方式,可以滚动和嵌套)
- 堡垒机开发环境部署说明
- 1012-L专题四
- [置顶] Android开发之第三方推送JPush极光推送知识点详解 学会集成第三方SDK推送
- mysql优化