漫步校园

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2183    Accepted Submission(s): 627

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
/*

*/
#include<stdio.h>
#include<iostream>
#include<cstdlib>
#include<queue>
using namespace std;
const int HH=(<<)-;
int f[][];
__int64 val[][];
int dis[][];
bool in_Queue[][];
int map[][]={{,},{,},{-,},{,-}};
int n;
struct node
{
int x;
int y;
};
void bfs()
{
int i,x1,y1;
node tmp,tmp2;
queue<node>q;
tmp.x=tmp.y=n;
q.push(tmp);
dis[n][n]=n;
// memset(in_Queue,false,sizeof(in_Queue));
// in_Queue[n][n]=true;
while(q.size()>)
{
tmp=q.front();
q.pop();
// in_Queue[tmp.x][tmp.y]=false;
for(i=;i<;i++)
{
x1=tmp.x+map[i][];
y1=tmp.y+map[i][];
if(x1>=&&x1<=n && y1>=&&y1<=n)
if(dis[x1][y1]==HH||dis[x1][y1]>dis[tmp.x][tmp.y]+f[x1][y1])
{
dis[x1][y1]=dis[tmp.x][tmp.y]+f[x1][y1];
// if(in_Queue[x1][y1]==false)
{
tmp2=tmp;
tmp.x=x1;
tmp.y=y1;
q.push(tmp);
tmp=tmp2;
in_Queue[x1][y1]=true;
}
}
}
}
}
void ceshi()
{
int i,j;
for(i=;i<=n;i++)
{
printf("\n");
for(j=;j<=n;j++)
printf("%d ",dis[i][j]);
}
}
__int64 dfs(int x,int y)
{
int i,x1,y1;
__int64 sum=;
if(x==n && y==n) return ;
if(val[x][y]>) return val[x][y];
for(i=;i<;i++)
{
x1=x+map[i][];
y1=y+map[i][];
if(x1>=&&x1<=n && y1>=&&y1<=n)
{
if(dis[x][y]>dis[x1][y1])
sum+=dfs(x1,y1);
}
}
val[x][y]=sum;
return val[x][y];
} int main()
{
int i,j;
__int64 k;
while(scanf("%d",&n)>)
{
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
scanf("%d",&f[i][j]);
dis[i][j]=HH;
}
bfs();
memset(val,,sizeof(val));
// ceshi();
k=;
k=dfs(,);
printf("%I64d\n",k);
}
return ;
}

HDU 1428的更多相关文章

  1. HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)

    题目地址:HDU 1428 先用BFS+优先队列求出全部点到机房的最短距离.然后用记忆化搜索去搜. 代码例如以下: #include <iostream> #include <str ...

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

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

  3. hdu 1428 漫步校园

    http://acm.hdu.edu.cn/showproblem.php?pid=1428 dijstra+dp; #include <cstdio> #include <queu ...

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

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

  5. hdu 1428(很好的一道题,最短路+记忆化搜索)

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

  6. HDU 1428漫步校园

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

  7. hdu 1142(迪杰斯特拉+记忆化搜索)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  8. hdu 4052 线段树扫描线、奇特处理

    Adding New Machine Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  9. 转载:hdu 题目分类 (侵删)

    转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...

随机推荐

  1. Day 30 面向对象的考试题

    -摘自张磊同学博客. 面向对象 1.请简述类.对象.实例化.实例这些名词的含义: #类 : 是对具有相同属性和相似行为的一类事物的抽象 #对象: 是一个具有具体属性值的类的实例化 #实例化 : 从一个 ...

  2. python 模块导入全局变量

    在哪种情况下需要从模块导入全局变量 项目里多个脚本均更改「某一个全局变量」时 全量变量需要实现可配置时 从模块导入全局变量的方法 from test_prokject import global_va ...

  3. 【学习笔记】dsu on tree

    我也不知道为啥这要起这名,完完全全没看到并查集的影子啊…… 实际上原理就是一个树上的启发式合并. 特点是可以在$O(nlogn)$的时间复杂度内完成对无修改的子树的统计,复杂度优于莫队算法. 局限性也 ...

  4. JS获取开始、结束时间

    /** * 获取本周.本季度.本月.上月的开始日期.结束日期 */ var now = new Date(); //当前日期 var nowDayOfWeek = now.getDay(); //今天 ...

  5. 如何将Excel导入到Mysql数据库中

    1.在mysql中建一张和Excel结构一样的表,或者修改excel信息,将excel的结构与mysql中table保持一致,包括字段名称. 2.利用mysql客户端工具navicat进行导入. 步骤 ...

  6. redis升级注意事项

    新版本redis读取 旧版本redis的rdb , aof 使用新版本redis备份rdb , aof操作系统级别备份 rdb , aof重启redis测试 新版本redisrdb , aof 能否读 ...

  7. Numpy 数组的切片操作

    实例+解释如下(表格):关键是要明白python中数组的下标体系.一套从左往右,一套从右往左. 1 import numpy as np 2 import sys 3 4 def main(): 5 ...

  8. 3、Xamarin Forms 调整安卓TabbedPage 下置

    降低学习成本是每个.NET传教士义务与责任. 建立生态,保护生态,见者有份.   教程晦涩难懂是我的错误. 对于默认的TabbedPage 上面进行页面切换 上面是安卓默认的情况 对我们大部分人来说都 ...

  9. mysql 数据库自动备份

    @echo offset "Ymd=%date:~,4%%date:~5,2%%date:~8,2%""E:/MySQL/MySQL Server 5.7/bin/mys ...

  10. 图解-安卓中调用OpenGL

    游戏开发中经常使用到OpenGL,当然很多人都喜欢直接用现有的游戏引擎,但相信了解的更多对你没有坏处 安卓开发中,采用的OpenGL ex2的规范,前几天看了下这个规范,整体上难度比1.0规范难度加大 ...