[HDU 1428]--漫步校园(记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1428
漫步校园
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
解题思路:典型的记忆化搜索,先结合优先队列bfs记录每一个点到终点最短路线条数(完成记忆化),然后dfs搜索路线条数即可~~~
代码如下:
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
int map[][], n;
int mark[][];
__int64 dp[][];
int dir[][] = { , , , -, , , -, };
struct node {
int x, y, time;
friend bool operator < (node x1, node x2){
//优先队列,时间小的先出队
return x1.time > x2.time;
}
};
void bfs(){
priority_queue<node>q;
node cur, next;
cur.x = n;//从(n,n)开始往前找,每次找最小时间到达(n,n)
cur.y = n;
cur.time = map[n][n];
mark[n][n] = ;
q.push(cur);
while (!q.empty()){
cur = q.top();
q.pop();
for (int i = ; i < ; i++){
next.x = cur.x + dir[i][];
next.y = cur.y + dir[i][];
if (next.x >= && next.x <= n&&next.y >= && next.y <= n&&!mark[next.x][next.y]){
mark[next.x][next.y] = ;
map[next.x][next.y] += cur.time;//在原数组记录每个点到终点的最短时间
next.time = map[next.x][next.y];
q.push(next);
}
}
}
}
__int64 dfs(int x, int y){
if (dp[x][y] > )return dp[x][y];
for (int i = ; i<; i++){
int v = x + dir[i][];
int u = y + dir[i][];
if (v >= && v <= n&&u >= && u <= n&&map[x][y]>map[v][u])//保证离终点原来越近
dp[x][y] += dfs(v, u);
}
return dp[x][y];
}
int main(){
int i, j;
while (scanf("%d", &n) != -){
memset(mark, , sizeof(mark));
for (i = ; i <= n; i++)
for (j = ; j <= n; j++)
scanf("%d", &map[i][j]);
bfs();
memset(dp, , sizeof(dp));
dp[n][n] = ;
printf("%I64d\n", dfs(, ));
}
return ;
}
[HDU 1428]--漫步校园(记忆化搜索)的更多相关文章
- HDU 1428 漫步校园(记忆化搜索,BFS, DFS)
漫步校园 http://acm.hdu.edu.cn/showproblem.php?pid=1428 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于 ...
- HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)
题目地址:HDU 1428 先用BFS+优先队列求出全部点到机房的最短距离.然后用记忆化搜索去搜. 代码例如以下: #include <iostream> #include <str ...
- HDU 1428漫步校园
漫步校园 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU校 ...
- hdu 4597 Play Game(记忆化搜索)
题目链接:hdu 4597 Play Game 题目大意:给出两堆牌,仅仅能从最上和最下取,然后两个人轮流取,都依照自己最优的策略.问说第一个人对多的分值. 解题思路:记忆化搜索,状态出来就很水,dp ...
- hdu 4856 Tunnels (记忆化搜索)
Tunnels Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- HDU 4597 Play Game(记忆化搜索,深搜)
题目 //传说中的记忆化搜索,好吧,就是用深搜//多做题吧,,这个解法是搜来的,蛮好理解的 //题目大意:给出两堆牌,只能从最上和最下取,然后两个人轮流取,都按照自己最优的策略,//问说第一个人对多的 ...
- HDU 5001 概率DP || 记忆化搜索
2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP 測 ...
- HDU 4597 Play Game (记忆化搜索博弈DP)
题意 给出2*n个数,分两列放置,每列n个,现在alice和bob两个人依次从任意一列的对头或队尾哪一个数,alice先拿,且两个人都想拿最多,问alice最后能拿到数字总和的最大值是多少. 思路 4 ...
- HDU 3779 Railroad(记忆化搜索)
Railroad Time Limit : 4000/2000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Subm ...
随机推荐
- mapreduce 关于小文件导致任务缓慢的问题
小文件导致任务执行缓慢的原因: 1.很容易想到的是map task 任务启动太多,而每个文件的实际输入量很小,所以导致了任务缓慢 这个可以通过 CombineTextInputFormat,解决,主要 ...
- javascriptDOM编程艺术_学习笔记_知识点 动态创建标记
传统技术:document.write 和 innerHTML 深入剖析DOM方法:createElement.createTextNode.appendChild 和 insertBefore ...
- 编写EL函数
1.建立java类的静态函数 package chapter4; public class ELFun { public static String processStr(String s){ s = ...
- Round B APAC Test 2017
https://code.google.com/codejam/contest/5254487 A. Sherlock and Parentheses Problem Sherlock and Wat ...
- photoshop自动切图
自动切图 前面的话 随着photoshop版本的不断升级,软件本身增加了很多新的功能,也为切图工作增加了很多的便利.photoshop最新的版本新增了自动切图功能,本文将详细介绍photoshop的这 ...
- 我的第一个REST客户端程序!
Delphi:XE8 看了好几天的资料了,也没有弄出来一个REST程序,尝试了XE8中带的例子,也都没有搞懂.我在网上不断搜索,看是否能够找到适合自己的文章,希望能够做出来一个REST的小例子,万幸, ...
- 【浏览器那些基础】Android平台有那些CPU类型
在编译Android应用的时候,需要配置支持的CPU类型,而目前Android支持的CPU类型包含了ARM和X86,所以在编译前需要指定CPU类型(不同的cpu的特性不一样): X86系列的 expo ...
- Jquery Select 下拉框处理
$("#select").empty();//清空 $("#select").append($("<option/>").val ...
- git 无法添加文件夹下文件
最近做项目时,发现无法提交某个子文件夹下的文件. google后发现可能是该子文件夹下有.git文件夹导致无法上传. 删除子文件夹下.git后,依然无法提交子文件夹下的文件. 继续google, 尝试 ...
- UIButton 动态改变文本闪烁问题
当动态改变(比如一秒改变一次)按钮的Title的时候发现按钮每次都要闪烁一下:解决方法如下: self.settleButton.titleLabel.text = title; [self.sett ...