HDU 1428 漫步校园(记忆化搜索,BFS, DFS)
漫步校园
http://acm.hdu.edu.cn/showproblem.php?pid=1428
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <iostream>
#include<queue>
using namespace std;
typedef __int64 LL;
const int max_n = ; int map[max_n][max_n], m[max_n][max_n];
LL s[max_n][max_n];
int n; struct Point
{
int x, y;
};
Point pp[];//开小了会出现RE const char alt_x[] = {, , -, };
const char alt_y[] = {-, , , }; void BFS() //广搜将每一点到达终点所需的最短时间保存起来, m[x][y]为点(x,y)到达终点所需的最短时间
{
int dx, dy, temp;
int rear = , top = ;
Point tm1, tm2;
pp[rear++] = (Point){n-, n-};
m[n-][n-] = map[n-][n-];
while (rear > top)
{
tm1 = pp[top];
top ++;
for (int i = ; i < ; i ++)
{
dx = tm1.x + alt_x[i];
dy = tm1.y + alt_y[i];
if (dx >= && dx < n && dy >= && dy < n)
{
temp = m[tm1.x][tm1.y] + map[dx][dy];
if (m[dx][dy] == - || temp < m[dx][dy])
{
tm2.x = dx;
tm2.y = dy;
m[dx][dy] = temp;
pp[rear++] = tm2;
}
}
}
}
} LL DFS(int x, int y)//深搜,将路径数统计起来
{
if (s[x][y] > )
return s[x][y];
if (x == n- && y == n-)
return ;
for (int i = ; i < ; i ++)
{
int dx = x + alt_x[i];
int dy = y + alt_y[i];
if (dx >= && dx < n && dy >= && dy < n)
if (m[x][y] > m[dx][dy])//考虑从A区域到B区域仅当存在一条从B到机房的路线比任何一条从A到机房的路线更近
s[x][y] += DFS(dx, dy);
}
return s[x][y];
} int main()
{
while(scanf("%d", &n) != EOF)
{
for (int i = ; i < n; i ++)
{
for (int j = ; j < n; j ++)
scanf ("%d", &map[i][j]);
}
memset(m, -, sizeof (m));
memset(s, , sizeof (s));
BFS();
DFS(, );
printf ("%I64d\n", s[][]);
}
return ;
}
HDU 1428 漫步校园(记忆化搜索,BFS, DFS)的更多相关文章
- [HDU 1428]--漫步校园(记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1428 漫步校园 Time Limit: 2000/1000 MS (Java/Others) M ...
- 记忆化搜索(DP+DFS) URAL 1183 Brackets Sequence
题目传送门 /* 记忆化搜索(DP+DFS):dp[i][j] 表示第i到第j个字符,最少要加多少个括号 dp[x][x] = 1 一定要加一个括号:dp[x][y] = 0, x > y; 当 ...
- HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)
题目地址:HDU 1428 先用BFS+优先队列求出全部点到机房的最短距离.然后用记忆化搜索去搜. 代码例如以下: #include <iostream> #include <str ...
- hdu1428漫步校园( 最短路+BFS(优先队列)+记忆化搜索(DFS))
Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于长时间坐在电脑边,缺乏运动.他决定充分利用每次从寝室到机房的时间,在校园里散散步.整个HDU校园呈方形布 ...
- 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 測 ...
随机推荐
- ED/EP系列4《圈存指令》
1. 圈存交易 通过圈存交易,持卡人可将其在银行相应账户上的资金划入电子存折或电子钱包中. 特点: 1)--必须在金融终端上联机进行; 2)--必须提交个人识别码(PIN) 步骤: 1) --终端: ...
- SQLserver使用映射表进行数据相关操作
基本需求: 老数据有老数据的顺序编码规则,新数据有新数据的顺序编码规则,但是老数据的编码还是要更新相应的东西,新数据也得实时更新,在新数据中已经用新编码规则对老数据对进行编码,在上报表中既要新增新数据 ...
- 基于AppCan MAS系统,如何轻松实现移动应用数据服务?
完成一个移动应用开发,前端提供页面展示,当它要与一些业务系统进行交互,又该如何实现呢?2016AppCan移动开发者大会上,AppCan前端开发经理杨庆,分享了AppCan轻松实现移动应用数据服务的方 ...
- Table ‘performance_schema.session_variables’ doesn’t exist
运行mysql时,提示Table ‘performance_schema.session_variables’ doesn’t exist 解决的方法是: 第一步:在管理员命令中输入: mysql_u ...
- Linux如何开机自动运行自己的脚本
博客分类: LINUX 脚本LinuxCentOSWindowsBash 记录这个事情是上次完成之后,今天要新加一个文件夹,一时之间忘记以前怎么做了,因为有几种方法,起码我知道三种方法,这里 ...
- extjs 表格可复制
在GridPanel的配置项中,加入这个配置就可以了: viewConfig:{ enableTextSelection:true }
- ListView usage in ERP-DEV
ListView Learning Note how to add double click event to listviewitem in ListView. refer link in stac ...
- VHDL----基础知识1
摘要: 打算分几篇,来理清VHDL的基础知识 ----------------------------------------------------------------------------- ...
- UITableView swift
// // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...
- 团队开发---NABC分析
我们的软件初步构想的是版主同学们解决宿舍订桶装水的问题,随着夏季的来临,桶装水的需求量日益加大,而我们订水的过程中常常会遇到这样或那样的问题.再次我只对我们项目中可以直观的看到今日卖家总库存水量和剩余 ...