HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)
题目地址:HDU 1428
先用BFS+优先队列求出全部点到机房的最短距离。然后用记忆化搜索去搜。
代码例如以下:
#include <iostream>
#include <string.h>
#include <math.h>
#include <queue>
#include <algorithm>
#include <stdlib.h>
#include <map>
#include <set>
#include <stdio.h>
using namespace std;
#define LL __int64
#define pi acos(-1.0)
const int mod=1e9+7;
const int INF=0x3f3f3f3f;
const double eqs=1e-9;
const int MAXN=50+10;
int d[MAXN][MAXN], mp[MAXN][MAXN], vis[MAXN][MAXN], n;
LL dp[MAXN][MAXN];
int jx[]={0,0,1,-1};
int jy[]={1,-1,0,0};
struct node
{
int x, y, step;
bool operator < (const node &tmp) const{
return tmp.step<step;
}
};
void bfs()
{
node f1, f2;
f1.x=n-1;
f1.y=n-1;
f1.step=mp[n-1][n-1];
d[n-1][n-1]=mp[n-1][n-1];
vis[n-1][n-1]=1;
priority_queue<node>q;
q.push(f1);
while(!q.empty()){
f1=q.top();
q.pop();
for(int i=0;i<4;i++){
f2.x=f1.x+jx[i];
f2.y=f1.y+jy[i];
if(f2.x>=0&&f2.x<n&&f2.y>=0&&f2.y<n&&!vis[f2.x][f2.y]){
vis[f2.x][f2.y]=1;
f2.step=f1.step+mp[f2.x][f2.y];
d[f2.x][f2.y]=f2.step;
q.push(f2);
}
}
}
}
LL dfs(int x, int y)
{
int i, a, b;
if(dp[x][y]) return dp[x][y];
for(i=0;i<4;i++){
a=x+jx[i];
b=y+jy[i];
if(a>=0&&a<n&&b>=0&&b<n&&d[a][b]<d[x][y]){
dp[x][y]+=dfs(a,b);
}
}
return dp[x][y];
}
int main()
{
int i, j;
while(scanf("%d",&n)!=EOF){
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&mp[i][j]);
}
}
memset(dp,0,sizeof(dp));
memset(vis,0,sizeof(vis));
bfs();
dp[n-1][n-1]=1;
printf("%I64d\n",dfs(0,0));
}
return 0;
}
HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)的更多相关文章
- HDU 1428 漫步校园(记忆化搜索,BFS, DFS)
漫步校园 http://acm.hdu.edu.cn/showproblem.php?pid=1428 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于 ...
- [HDU 1428]--漫步校园(记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1428 漫步校园 Time Limit: 2000/1000 MS (Java/Others) M ...
- HDU 1428漫步校园
漫步校园 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU校 ...
- HDU 4960 Another OCD Patient(记忆化搜索)
HDU 4960 Another OCD Patient pid=4960" target="_blank" style="">题目链接 记忆化 ...
- 随手练——HDU 1078 FatMouse and Cheese(记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=1078 题意: 一张n*n的格子表格,每个格子里有个数,每次能够水平或竖直走k个格子,允许上下左右走,每次走的格子 ...
- HDU 4628 Pieces(状态压缩+记忆化搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=4628 题意:给个字符窜,每步都可以删除一个字符窜,问最少用多少步可以删除一个字符窜分析:状态压缩+记忆化搜索 ...
- HDU 4597 Play Game (DP,记忆化搜索,博弈)
题意:Alice和Bob玩一个游戏,有两个长度为N的正整数数字序列,每次他们两个,只能从其中一个序列,选择两端中的一个拿走.他们都希望可以拿到尽量大的数字之和, 并且他们都足够聪明,每次都选择最优策略 ...
- HDU 1331 Function Run Fun(记忆化搜索)
Problem Description We all love recursion! Don't we? Consider a three-parameter recursive function w ...
- HDU - 5001 Walk(概率dp+记忆化搜索)
Walk I used to think I could be anything, but now I know that I couldn't do anything. So I started t ...
随机推荐
- 在xampp与phpstorm环境下安装xdebug[转]
XDebug是什么 很多PHP程序员调试使用echo.print_r().var_dump().printf()等,虽然对于有较丰富开发经验的程序员来说这些也已经足够了,他们往往可以在程序执行的过程中 ...
- Linux系统基本命令
要区分大小写 uname 显示版本信息(同win2K的 ver) dir 显示当前目录文件 ls -al 显示包括隐藏文件(同win2K的 dir) pwd 查询当前所在的目录位置 cd .. 回到上 ...
- mysql5.7主从复制--在线变更复制类型【转】
这里说一下关于如何在线变更复制类型(日志复制到全局事物复制),参考课程:mysql5.7复制实战 先决条件 (1)集群中所有的服务器版本均高于5.7.6(2)集群中所有的服务器gtid_mod ...
- COM和.NET的互操作
组件对象模型的基本知识 基于构件的软件开发日益流行,这里我吧自己在学校时整理的关于COM的一些东西献给大家,供初学者参考.一.组件(COM),是微软公司为了计算机工业的软件生产更加符合 ...
- springboot:mybatis多数据源配置
1.application.properties #CMS数据源(主库) spring.datasource.cms.driver-class-name=com.mysql.jdbc.Driver s ...
- Python 单例模式讲解
Python 单例模式讲解 本节内容: classmethod用途 单例模式方法一 类__new__方法讲解 单例模式方法二 前言: 使用单例方法的好处:对于一个类,多次实例化会产生多个对象,若使用单 ...
- sonarLint--强大的代码审查工具(插件)
idea也有的一个插件 贴上一个eclipse的sonarlint用法 http://blog.csdn.net/limm33/article/details/51166840 不过听说从2015年1 ...
- flask你一定要知道的上下文管理机制
前引 在了解flask上下文管理机制之前,先来一波必知必会的知识点. 面向对象双下方法 首先,先来聊一聊面向对象中的一些特殊的双下划线方法,比如__call__.__getattr__系列.__get ...
- maven 配置阿里云仓库
<mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> < ...
- 2017 icpc 沈阳 G - Infinite Fraction Path
题目大意:有n个点, 每个点有一个数字0 - 9, 第 i 个点只能到 第(i * i + 1)个点,问你在哪个点出发走n次构成的数字串最大. 思路:利用求后缀数组的倍增比较思想, 许多细节需要注意. ...