漫步校园

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 41   Accepted Submission(s) : 14
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
ACM暑期集训队练习赛(三)
“他考虑从A区域到B区域仅当存在一条从B到机房的路线比任何一条从A到机房的路线更近(否则可能永远都到不了机房了…”这句话一定要理解清楚。就是说,对于当前位置,如果下一个状态与终点的最短距离大于或者等于当前位置到终点的最短距离,那么这个下一个状态是不可取的!到此,就能明白,此题就是求出所有点与终点的最短距离,然后再从起点进行记忆化搜索。
#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>using namespace std;const int N=60;
const int INF=99999999;int map[N][N];
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};struct node{int x,y;
};int n;
int dis[N][N],visited[N][N];
long long res[N][N];void BFS(){         //BFS求最短路queue<node> myqueue;while(!myqueue.empty())myqueue.pop();int i,j,k;for(i=0;i<N;i++)for(j=0;j<N;j++)dis[i][j]=INF;memset(visited,0,sizeof(visited));dis[n][n]=map[n][n];node cur,next;cur.x=n;cur.y=n;myqueue.push(cur);visited[cur.x][cur.y]=1;int x,y;while(!myqueue.empty()){cur=myqueue.front();myqueue.pop();visited[cur.x][cur.y]=0;for(k=0;k<4;k++){next.x=x=cur.x+dir[k][0];next.y=y=cur.y+dir[k][1];if(x>=1 && x<=n && y>=1 && y<=n && dis[x][y]>dis[cur.x][cur.y]+map[x][y]){dis[x][y]=dis[cur.x][cur.y]+map[x][y];if(!visited[x][y]){visited[x][y]=1;myqueue.push(next);}}}}
}long long DFS(int x,int y){    //DFS求路径数量,使用记忆搜索优化。if(x==n && y==n)return 1;if(res[x][y]!=-1)return res[x][y];res[x][y]=0;int si,sj,k;for(k=0;k<4;k++){si=x+dir[k][0];sj=y+dir[k][1];if(si>=1 && si<=n && sj>=1 && sj<=n && dis[si][sj]<dis[x][y])res[x][y]+=DFS(si,sj);}return res[x][y];
}int main(){//freopen("input.txt","r",stdin);while(scanf("%d",&n)!=EOF){for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&map[i][j]);BFS();memset(res,-1,sizeof(res));printf("%I64d\n",DFS(1,1));}return 0;
}

HDU 漫步校园 (记忆化搜索)相关推荐

  1. 22.12.1打卡 漫步校园 记忆化搜索

    题目里很显然只走最短路, 直接用bfs从终点到起点搜一遍将每一步到终点所需要的最短的时间存在一个dis数组中, 然后你就会发现原来的地图变成了这样 上面是地图下面是dis数组, 再看看经典记忆化搜索模 ...

  2. hdoj1428 -- 漫步校园 (记忆化搜索)

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

  3. hdu 1078(记忆化搜索)

    题意: 老鼠每次最多走k步停下来,停下的这个位置只能比上一个停留的位置大,并获取其价值,每次只能水平或垂直走,问最大能得到的价值 解题思路:这道题可以用记忆化搜索解决,dp[i][j]表示老鼠在位置( ...

  4. How many ways HDU - 1978(记忆化搜索关于求多少种方式模板)

    题目: 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 1.机器人一开始在棋盘的起始点并有起始点所标有的能量. 2.机器人只能向右或 ...

  5. FatMouse and Cheese HDU - 1078(记忆化搜索入门模板)

    题意: n * n的正方形格子(每个格子均放了奶酪),老鼠从(0,0)开始,每次最多移动k步,可以选择上下左右四个方向移动,下一个移动点奶酪块数量必须要大于当前点. 整理模板ing- 题目: FatM ...

  6. POJ1088 滑雪题解+HDU 1078(记忆化搜索DP)

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  7. hdu 4722(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 思路:简单的记忆化搜索,留意一下A==0时的情况就可以了. 1 #include<iost ...

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

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

  9. hdu 1142 记忆化搜索

    题目是这样的,貌似一开始我这个英语搓的人还理解错了...orz http://acm.hdu.edu.cn/showproblem.php?pid=1142 就是最短路,只不过用dijkstra是从终 ...

最新文章

  1. 论文《一种金融市场预测的深度学习模型:FEPA》(3)--EMD+PCA
  2. 高速跟踪--High-Speed Tracking-by-Detection Without Using Image Information
  3. 如何用ActionScript制作绚丽的特效——Silk
  4. 【MaxCompute】学习笔记常用查询sql
  5. 给C#开发者的代码审查清单
  6. PHP预防XSS攻击,ajax跨域攻击的方法
  7. java void方法_Java对象类的最终void wait(long ms)方法,包含示例
  8. 阿联酋起源人工智能研究院(IIAI)诚邀优秀人才加盟
  9. iis解析错误的编号_2019年网络工程师考试试题及解析(上午21-44题)
  10. 多个 Linux 发行版考虑移除 Chromium 软件包
  11. hadoop 2.6.4 java_Windows下使用Hadoop2.6.0
  12. 微软sql服务器双机热备,office2014-SQL Server2014 R2 双机热备,保护你的数据
  13. 宏基4752g linux驱动下载,宏基4752g显卡驱动
  14. 读程士宏之《测度论与概率论基础》
  15. 前端架构之 React 领域驱动设计
  16. CTC,RNN-Transducer, LAS
  17. 通过GPRS 模块M26程序实现 实时时钟
  18. csp-j/s组第一轮测试140题版本模拟试题及解析
  19. 描写油菜花的好句好段
  20. 青少年为何有时不会换位思考

热门文章

  1. java数组_Java数组
  2. aws rds恢复数据库_Amazon RDS – AWS关系数据库服务
  3. 人工智能时代,技术人员应该掌握的技能
  4. Spring Cloud 分布式链路跟踪 Sleuth + Zipkin + Elasticsearch
  5. 防止easyui的DataGride莫名其妙的选中最后一行或删除后编辑信息提示已有选中项的bug...
  6. nodejs(koajs)设置中文cookie无效
  7. TypeScript + ES6
  8. mycat1.4.1小白用户入门(一)
  9. 正则式获取特定标识的字符串并替换
  10. LeetCode题解:Add Two Numbers