搜索专题: HDU1428漫步校园
漫步校园
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 4459 Accepted Submission(s): 1401
3
1 2 3
1 2 3
1 2 3
3
1 1 1
1 1 1
1 1 1
1
6
RunId : 21258881 Language : G++ Author : hnustwanghe
Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
const int N = 50 + 5;
const int INF = (1<<30);
long long Min[N][N],dp[N][N];
typedef struct node{
int x,y,val;
node(int x=0,int y=0,int val=0):x(x),y(y),val(val){}
}Node;
const int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int mat[N][N];
int n,newx,newy;
long long DFS(int x,int y){
if(x == n-1 && y == n-1) return 1;
if(dp[x][y]>0) return dp[x][y];
for(int d=0;d<4;d++){
newx = x + dir[d][0];
newy = y + dir[d][1];
if(newx >= 0 && newx < n && newy >= 0 && newy < n && Min[x][y] > Min[newx][newy]){
dp[x][y] += DFS(newx,newy);
}
}
return dp[x][y];
}
void Init(int n){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
Min[i][j] = INF;
memset(dp,0,sizeof(dp));
}
void BFS(){
queue <Node> Q;
Node t,s;
Min[n-1][n-1] = mat[n-1][n-1];
t.x = n-1,t.y = n-1,t.val = mat[n-1][n-1];
Q.push(t);
while(!Q.empty()){
t = Q.front();Q.pop();
for(int d=0;d<4;d++){
newx = t.x + dir[d][0];
newy = t.y + dir[d][1];
if(newx >=0 && newx < n && newy >= 0 && newy < n){
s.val = t.val + mat[newx][newy];
if(s.val < Min[newx][newy]){
s.x = newx , s.y = newy;
Min[newx][newy] = s.val;
Q.push(s);
}
}
}
}
}
int main(){
while(scanf("%d",&n)==1){
Init(n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
scanf("%d",&mat[i][j]);
}
BFS();
printf("%I64d\n",DFS(0,0));
}
}
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
const int N = 50 + 5;
const int INF = (1<<30);
long long Min[N][N],dp[N][N];
typedef struct node{
int x,y,val;
node(int x=0,int y=0,int val=0):x(x),y(y),val(val){}
}Node;
const int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int mat[N][N];
int n,newx,newy; long long DFS(int x,int y){
if(x == n-1 && y == n-1) return 1;
if(dp[x][y]>0) return dp[x][y];
for(int d=0;d<4;d++){
newx = x + dir[d][0];
newy = y + dir[d][1];
if(newx >= 0 && newx < n && newy >= 0 && newy < n && Min[x][y] > Min[newx][newy]){
dp[x][y] += DFS(newx,newy);
}
}
return dp[x][y];
}
void Init(int n){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
Min[i][j] = INF;
memset(dp,0,sizeof(dp));
} void BFS(){
queue <Node> Q;
Node t,s;
Min[n-1][n-1] = mat[n-1][n-1];
t.x = n-1,t.y = n-1,t.val = mat[n-1][n-1];
Q.push(t);
while(!Q.empty()){
t = Q.front();Q.pop();
for(int d=0;d<4;d++){
newx = t.x + dir[d][0];
newy = t.y + dir[d][1];
if(newx >=0 && newx < n && newy >= 0 && newy < n){
s.val = t.val + mat[newx][newy];
if(s.val < Min[newx][newy]){
s.x = newx , s.y = newy;
Min[newx][newy] = s.val;
Q.push(s);
}
}
}
}
} int main(){
while(scanf("%d",&n)==1){
Init(n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++){
scanf("%d",&mat[i][j]);
}
BFS();
printf("%I64d\n",DFS(0,0));
}
}
搜索专题: HDU1428漫步校园的更多相关文章
- hdu1428漫步校园( 最短路+BFS(优先队列)+记忆化搜索(DFS))
Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU校园呈方形布 ...
- hdu1428漫步校园
#include <queue> #include <iostream> #include <algorithm> #include <cstring> ...
- 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 ...
- Hdu428 漫步校园 2017-01-18 17:43 88人阅读 评论(0) 收藏
漫步校园 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submissi ...
- HDU 1428漫步校园
漫步校园 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU校 ...
- HDOJ 1428 漫步校园
漫步校园 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU(搜索专题) 1000 N皇后问题(深度优先搜索DFS)解题报告
前几天一直在忙一些事情,所以一直没来得及开始这个搜索专题的训练,今天做了下这个专题的第一题,皇后问题在我没有开始接受Axie的算法低强度训练前,就早有耳闻了,但一直不知道是什么类型的题目,今天一看,原 ...
- NOIP2018提高组金牌训练营——搜索专题
NOIP2018提高组金牌训练营——搜索专题 1416 两点 福克斯在玩一款手机解迷游戏,这个游戏叫做”两点”.基础级别的时候是在一个n×m单元上玩的.像这样: 每一个单元有包含一个有色点.我们将用不 ...
随机推荐
- 6402. 【NOIP2019模拟11.01】Cover(启发式合并)
题目描述 Description 小 A 现在想用
- 2019hdu多校 Fansblog
Problem Description Farmer John keeps a website called 'FansBlog' .Everyday , there are many people ...
- Centos7安装Redis3.X
本文只是简单搭建Redis,为了整合ELK用,后面会详细写. Redis:REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高 ...
- 【C++】关键字struct
网址连接 https://www.cnblogs.com/zhengfa-af/p/8144786.html 主要内容: 1. C语言中,结构体的3中不同声明和定义方式: 2. struct在C和C+ ...
- 【canvas学习笔记八】像素操作
ImageData对象 ImageData对象包含了一个区域内的canvas的像素信息.它包含以下可读属性: width canvas的宽度,单位是像素. height canvas的高度,单位是像素 ...
- Atom 输入时按 Tab 快捷键提示怎么取消?
按 Esc 按 Ctrl + . 在 mac 中使用 Cmd + .
- sqli-labs(21)
cookie注入 引号和括号闭合 base64编码 0X01 看了题目应该是 cookie注入 闭合是') 那么base64编码是什么鬼?? 看源码解决吧 https://www.cnblogs.co ...
- 初识REST
RESTful介绍: REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”或“表现层状态转化”. 1 ...
- HDU6623 思维题(n分解成质因子的形式,问最小的幂是多少)
题目大意:给你一个数n,把它分解为素数的幂次的乘积的形式:n=p1^e1 * p2^e2 * .......pk^ek 求最小的幂次是多少 n=le18 分析: 首先我们肯定是不可以枚举1e18的因 ...
- Android由出生年月日计算年龄(周岁)
先从String类型的出生日期(“yyyy-MM-dd”)中提取int类型的年.月.日:再计算岁数. 程序如下: /** * 根据出生日期计算年龄的工具类BirthdayToAgeUtil */ pu ...