漫步校园

http://acm.hdu.edu.cn/showproblem.php?pid=1428

Problem Description
LL最近沉迷于AC不能自拔,每天寝室、机房两点一线。由于长时间坐在电脑边,缺乏运动。他决定充分利用每次从寝室到机房的时间,在校园里散散步。整个HDU校园呈方形布局,可划分为n*n个小方格,代表各个区域。例如LL居住的18号宿舍位于校园的西北角,即方格(1,1)代表的地方,而机房所在的第三实验楼处于东南端的(n,n)。因有多条路线可以选择,LL希望每次的散步路线都不一样。另外,他考虑从A区域到B区域仅当存在一条从B到机房的路线比任何一条从A到机房的路线更近(否则可能永远都到不了机房了…)。现在他想知道的是,所有满足要求的路线一共有多少条。你能告诉他吗?
 
Input
每组测试数据的第一行为n(2=<n<=50),接下来的n行每行有n个数,代表经过每个区域所花的时间t(0<t<=50)(由于寝室与机房均在三楼,故起点与终点也得费时)。
 
Output
针对每组测试数据,输出总的路线数(小于2^63)。
 
Sample Input
3
1 2 3
1 2 3
1 2 3
3
1 1 1
1 1 1
1 1 1
 
Sample Output
1
6
 
解题思路:运用广搜,从终点往下遍历,保存每一点到达终点所需要的最短时间,然后按最短时间从起点往上遍历,记忆化搜索可行路径,并保存可行路径数
 
解题代码:
 #include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include<queue>
using namespace std;
typedef __int64 LL;
const int max_n = ; int map[max_n][max_n], m[max_n][max_n];
LL s[max_n][max_n];
int n; struct Point
{
int x, y;
};
Point pp[];//开小了会出现RE const char alt_x[] = {, , -, };
const char alt_y[] = {-, , , }; void BFS() //广搜将每一点到达终点所需的最短时间保存起来, m[x][y]为点(x,y)到达终点所需的最短时间
{
int dx, dy, temp;
int rear = , top = ;
Point tm1, tm2;
pp[rear++] = (Point){n-, n-};
m[n-][n-] = map[n-][n-];
while (rear > top)
{
tm1 = pp[top];
top ++;
for (int i = ; i < ; i ++)
{
dx = tm1.x + alt_x[i];
dy = tm1.y + alt_y[i];
if (dx >= && dx < n && dy >= && dy < n)
{
temp = m[tm1.x][tm1.y] + map[dx][dy];
if (m[dx][dy] == - || temp < m[dx][dy])
{
tm2.x = dx;
tm2.y = dy;
m[dx][dy] = temp;
pp[rear++] = tm2;
}
}
}
}
} LL DFS(int x, int y)//深搜,将路径数统计起来
{
if (s[x][y] > )
return s[x][y];
if (x == n- && y == n-)
return ;
for (int i = ; i < ; i ++)
{
int dx = x + alt_x[i];
int dy = y + alt_y[i];
if (dx >= && dx < n && dy >= && dy < n)
if (m[x][y] > m[dx][dy])//考虑从A区域到B区域仅当存在一条从B到机房的路线比任何一条从A到机房的路线更近
s[x][y] += DFS(dx, dy);
}
return s[x][y];
} int main()
{
while(scanf("%d", &n) != EOF)
{
for (int i = ; i < n; i ++)
{
for (int j = ; j < n; j ++)
scanf ("%d", &map[i][j]);
}
memset(m, -, sizeof (m));
memset(s, , sizeof (s));
BFS();
DFS(, );
printf ("%I64d\n", s[][]);
}
return ;
}
 

HDU 1428 漫步校园(记忆化搜索,BFS, DFS)的更多相关文章

  1. [HDU 1428]--漫步校园(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1428 漫步校园 Time Limit: 2000/1000 MS (Java/Others)    M ...

  2. 记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence

    题目传送门 /* 记忆化搜索(DP+DFS):dp[i][j] 表示第i到第j个字符,最少要加多少个括号 dp[x][x] = 1 一定要加一个括号:dp[x][y] = 0, x > y; 当 ...

  3. HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)

    题目地址:HDU 1428 先用BFS+优先队列求出全部点到机房的最短距离.然后用记忆化搜索去搜. 代码例如以下: #include <iostream> #include <str ...

  4. hdu1428漫步校园( 最短路+BFS(优先队列)+记忆化搜索(DFS))

    Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU校园呈方形布 ...

  5. HDU 1428漫步校园

    漫步校园 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU校 ...

  6. hdu 4597 Play Game(记忆化搜索)

    题目链接:hdu 4597 Play Game 题目大意:给出两堆牌,仅仅能从最上和最下取,然后两个人轮流取,都依照自己最优的策略.问说第一个人对多的分值. 解题思路:记忆化搜索,状态出来就很水,dp ...

  7. hdu 4856 Tunnels (记忆化搜索)

    Tunnels Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  8. HDU 4597 Play Game(记忆化搜索,深搜)

    题目 //传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的 //题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的 ...

  9. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

随机推荐

  1. Effiective C++ (一)

    最近在看Effective  C++ ,同时将总结一下里边的重要知识点: ##########################    module  1    #################### ...

  2. hdu 2066 一个人的旅行

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2066 一个人的旅行 Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷 ...

  3. hdu 1702 ACboy needs your help again!

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1702 ACboy needs your help again! Description ACboy w ...

  4. 修改linux端口范围 ip_local_port_range

    tags: ip_local_port_range 端口范围 sysctl Linux中有限定端口的使用范围,如果我要为我的程序预留某些端口,那么我需要控制这个端口范围, 本文主要描述如何去修改端口范 ...

  5. 第三方登录开发-Facebook

    这次这个项目要分别可以使用新浪微博,qq互联以及Facebook和Twitter授权登录 facebook目前只支持oauth2技术,个人理解其工作流程是当用户想访问当前网站,却不想注册账号,此时当前 ...

  6. [转]tftp在put上传的时候显示File not found的解决办法

    [转]tftp在put上传的时候显示File not found的解决办法 http://blog.163.com/pengcz%40126/blog/static/35908607201182433 ...

  7. 为SM30视图分配事务代码

    Tcode:SE93

  8. MATLAB GUI程序设计中ListBox控件在运行期间消失的原因及解决方法

    在运行期间,ListBox控件突然消失,同时给出如下错误提示: Warning: single-selection listbox control requires that Value be an ...

  9. 容器适配器之priority_queue

    template <class T, class Container = vector<T>,                class Compare = less<type ...

  10. Understanding Convolutions【转】

    Understanding Convolutions In a previous post, we built up an understanding of convolutional neural ...