漫步校园

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 4459    Accepted Submission(s): 1401

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
 
Author
LL
 
Source
 

Problem : 1428 ( 漫步校园 )     Judge Status : Accepted

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漫步校园的更多相关文章

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

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

  2. hdu1428漫步校园

    #include <queue> #include <iostream> #include <algorithm> #include <cstring> ...

  3. HDU 1428 漫步校园(记忆化搜索,BFS, DFS)

    漫步校园 http://acm.hdu.edu.cn/showproblem.php?pid=1428 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于 ...

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

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

  5. Hdu428 漫步校园 2017-01-18 17:43 88人阅读 评论(0) 收藏

    漫步校园 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submissi ...

  6. HDU 1428漫步校园

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

  7. HDOJ 1428 漫步校园

    漫步校园 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  8. HDU(搜索专题) 1000 N皇后问题(深度优先搜索DFS)解题报告

    前几天一直在忙一些事情,所以一直没来得及开始这个搜索专题的训练,今天做了下这个专题的第一题,皇后问题在我没有开始接受Axie的算法低强度训练前,就早有耳闻了,但一直不知道是什么类型的题目,今天一看,原 ...

  9. NOIP2018提高组金牌训练营——搜索专题

    NOIP2018提高组金牌训练营——搜索专题 1416 两点 福克斯在玩一款手机解迷游戏,这个游戏叫做”两点”.基础级别的时候是在一个n×m单元上玩的.像这样: 每一个单元有包含一个有色点.我们将用不 ...

随机推荐

  1. mysql存储ip数值

    字段使用 int unsigned 类型就可以满足存贮ip2long(ip)的数值 插入时,可以使用inet_aton('100.200.30.22') 将ip地址转换为数值 查询时,使用inet_n ...

  2. mysql MAX()函数 语法

    mysql MAX()函数 语法 作用:返回一列中的最大值.NULL 值不包括在计算中.直线电机模组--BZD80N 语法:SELECT MAX(column_name) FROM table_nam ...

  3. CSS无图片三角形

    border:6px solid #f2f2f2; border-color:#999 transparent transparent transparent; border-style:solid ...

  4. nginx展示文件目录

    1. 如何让nginx显示文件夹目录 vi /etc/nginx/conf.d/default.conf 添加如下内容: location / { root /data/www/file //指定实际 ...

  5. 【gym102394A】Artful Paintings(差分约束系统,二分)

    题意:给定一个长为n的序列,每个位置可以选择取或不取,要求构造方案使得: 1.对于前M1个约束,区间[L,R]内取的数量必须严格不少于K 2.对于后M2个约束,区间[L,R]外取的数量必须严格不少于K ...

  6. Spring Cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)

    今天我们对OAuth2.0的整合方式做一下笔记,首先我从网上找了一些关于OAuth2.0的一些基础知识点,帮助大家回顾一下知识点: 一.oauth中的角色 client:调用资源服务器API的应用 O ...

  7. Java基础之文件的输入输出流操作

    在介绍输入输出流之前,首先需要了解如何创建文件,创建文件夹以及遍历文件夹等各种操作,这里面不在一一介绍,主要介绍的是文件的输入输出流操作. 在起初学习文件操作之前,总是喜欢将输入输出弄混淆,后来通过看 ...

  8. [BZOJ2427]:[HAOI2010]软件安装(塔尖+DP)

    题目传送门 题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用${W}_{i}$的磁盘空间,它的价值为${V}_{i}$.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件 ...

  9. http常用标签

    HTML标签大全(常用)   文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言. HTML之所以称为超文本标记语言,是因为文本中包含了所 ...

  10. Linux小记 -- [已解决]Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings

    问题描述 操作系统:Ubuntu Server 18.04 LTS Ubuntu每次启动时产生如下motd(message of today)输出 Failed to connect to https ...