hdu - 1428 - 漫步校园(bfs + dp)
来源:互联网 发布:网络技术服务合同范本 编辑:程序博客网 时间:2024/05/02 23:21
题意:一个 n x n 的矩阵(2=<n<=50),矩阵中的每个元素代表在这个位置上要花的时间(0<t<=50),现要从(1, 1) 去到(n, n),在走的过程中,如果走一步,则到达的位置到(n, n)的最短路要比当前位置到达(n, n)的最短路要短。问到达(n, n)有多少种走法。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1428
——>>题目有点绕。。所说的最短路是从终点往回推的最短路。。
先 bfs 求出各点到(n, n)的最短路,再dp。。
状态:dp[i][j] 表示从 (i, j) 到(n, n)的路径数
#include <cstdio>#include <queue>#include <cstring>using std::priority_queue;const int MAXN = 50 + 10;const int dx[] = {-1, 1, 0, 0};const int dy[] = { 0, 0, -1, 1};struct NODE{ int x; int y; long long t; NODE(int x = 0, int y = 0, long long t = 0) : x(x), y(y), t(t){} bool operator < (const NODE& e) const { return t > e.t; }};int n;long long G[MAXN][MAXN];long long Time[MAXN][MAXN];long long dp[MAXN][MAXN];void Read(){ for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { scanf("%I64d", &G[i][j]); } }}void Bfs(){ priority_queue<NODE> qu; memset(Time, -1, sizeof(Time)); qu.push(NODE(n, n, G[n][n])); Time[n][n] = G[n][n]; while (!qu.empty()) { NODE u = qu.top(); qu.pop(); for (int i = 0; i < 4; ++i) { int newx = u.x + dx[i]; int newy = u.y + dy[i]; if (newx >= 1 && newx <= n && newy >= 1 && newy <= n && Time[newx][newy] == -1) { Time[newx][newy] = u.t + G[newx][newy]; qu.push(NODE(newx, newy, Time[newx][newy])); } } }}void Init(){ memset(dp, -1, sizeof(dp)); dp[n][n] = 1;}long long Dp(int x, int y){ long long& ans = dp[x][y]; if (ans != -1) return ans; ans = 0; for (int i = 0; i < 4; ++i) { int newx = x + dx[i]; int newy = y + dy[i]; if (newx >= 1 && newx <= n && newy >= 1 && newy <= n && Time[newx][newy] < Time[x][y]) { ans += Dp(newx, newy); } } return ans;}void Solve(){ printf("%I64d\n", Dp(1, 1));}int main(){ while (scanf("%d", &n) == 1) { Read(); Bfs(); Init(); Solve(); } return 0;}
状态转移方程:dp[i][j] += dp[x][y]。。(i, j) ——> (x, y) ——> (n, n)。。
0 0
- hdu - 1428 - 漫步校园(bfs + dp)
- HDU 1428 漫步校园 (搜索 + dp)
- hdu-1428 漫步校园(BFS+记忆化搜索)
- HDU 1428 漫步校园(BFS+DFS)
- hdu 1428(漫步校园)
- hdu 1428 漫步校园
- HDU 1428 漫步校园
- hdu 1428 漫步校园
- HDU 1428 校园漫步
- HDU 1428 漫步校园
- hdu 1428 漫步校园
- HDU 1428 漫步校园
- hdu 1428 漫步校园 优先队列BFS +记忆化搜索
- HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)
- HDU 1428 漫步校园(bfs + 记忆化搜索)
- HDU 1428 漫步校园 (BFS + 记忆化搜索)
- hdoj1428_漫步校园(dp)
- hdoj 1428 漫步校园 【BFS+DFS】
- 模拟电子技术100问
- 已知坐标求多边形面积
- android 学习教程六之----四大组件之一——BroadcastReciever
- R语言线性回归预测网页流量
- Intellij Idea设置自定义调试签名
- hdu - 1428 - 漫步校园(bfs + dp)
- 再探.NET的PE文件结构(安全篇)
- 匹配两个字符串的最大子串
- 115. Calendar
- POJ3050 Hopscotch 【DFS】
- 字符读取流缓冲区 练习 笔记
- umask设置导致的weblogic中的应用上传的文件没有权限打开
- Ajax入门例子
- android中dip、dp、px、sp和屏幕密度