[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 ...
随机推荐
- C++对象模型5--多继承下的对象模型
C++对象模型中加入多继承 从单继承可以知道,派生类中只是扩充了基类的虚函数表.如果是多继承的话,又是如何扩充的? 1) 每个基类都有自己的虚表. 2) 子类的成员函数被放 ...
- 0520 python
配置python环境变量我的电脑->右键->属性->高级系统设置->环境变量->(1)用户变量->新建 Path=C:\Python27(2)系统变量->编辑 ...
- Grunt.js 上手
Official Site gruntjs.org/docs/getting-started.html 或者看http://tgideas.qq.com/webplat/info/news_versi ...
- QQwry
http://blog.runphp.net/archives/156 http://wenku.baidu.com/link?url=yvd3_EpMM66r6H4qkx3oqcaU2JZNAQv_ ...
- c#读写共享内存操作函数封装
原文 c#读写共享内存操作函数封装 c#共享内存操作相对c++共享内存操作来说原理是一样,但是c#会显得有点复杂. 现把昨天封装的读写共享内存封装的函数记录下来,一方面希望给需要这块的有点帮助,另一方 ...
- [HDU 3336]Count the String[kmp][DP]
题意: 求一个字符串的所有前缀串的匹配次数之和. 思路: 首先仔细思考: 前缀串匹配. n个位置, 以每一个位置为结尾, 就可以得到对应的一个前缀串. 对于一个前缀串, 我们需要计算它的匹配次数. k ...
- HDU 1276 士兵队列训练问题
模拟题,学了一下list it=li.erase(it):指向删除后的第一个元素 #include <cstdio> #include <list> using namespa ...
- Android Animations动画使用详解
一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画 ...
- Uber选拔专车司机:五年以上驾驶经验 两小时视频培训
摘要:说起当时下流行打车软件Uber的司机,还得从春节前在上海一次打车说起.那几天,记者在上海某商场逛到打烊时间,大包小包拎着袋子根本腾不出手拦出租车,而商场门口的出租车临时停靠点更是挤满“血拼”而归 ...
- 【Java线程】Lock、Condition
http://www.infoq.com/cn/articles/java-memory-model-5 深入理解Java内存模型(五)——锁 http://www.ibm.com/develope ...