漫步校园

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 32   Accepted Submission(s) : 17

Font: Times New Roman | Verdana | Georgia

Font Size: ← →

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

—————————————————————————————————————————————————

这题的思想就是:先用BFS求出n到任何一点的最短距离(跟迪杰斯特拉一样),这就是利用了动态规划的思想;



然后,再用DFS进行搜索,这里就要就行记忆化的搜索,具体就是,如果到该点的最短距离的路的条数已经知道那么就不需要再往下求了。










#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std; int m,t;
int mp[55][55];
int vir[55][55];
long long int dp[55][55];
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; struct node
{
    int x,y,cnt;
}; bool check(int x,int y)
{
if(x<1||x>m||y<1||y>m)
return 0;
return 1;
} void bfs()
{
    queue<node>q;
    while(!q.empty())
        q.pop();
    node f,d;
    f.x=m;
    f.y=m;
    f.cnt=mp[m][m];
    vir[m][m]=mp[m][m];
    q.push(f);
    while(!q.empty())
    {
        f=q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            d.x=f.x+dir[i][0];
            d.y=f.y+dir[i][1];
            if(check(d.x,d.y))
            {
                d.cnt=vir[f.x][f.y]+mp[d.x][d.y];
                if(d.cnt<vir[d.x][d.y])
                {
                    vir[d.x][d.y]=d.cnt;
                    q.push(d);
                }
            }
        }
    }
} long long dfs(int x,int y){ //DFS求路径数量,使用记忆搜索优化。
if(x==m && y==m)
return 1;
if(dp[x][y]!=-1)
return dp[x][y];
dp[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<=m && sj>=1 && sj<=m && vir[si][sj]<vir[x][y])
dp[x][y]+=dfs(si,sj);
}
return dp[x][y];
} int main()
{
    while(~scanf("%d",&m))
    {
        for(int i=1;i<=m;i++)
        {
            for(int j=1;j<=m;j++)
            {
                scanf("%d",&mp[i][j]);
            }
        }
memset(vir,1000000,sizeof(vir));
bfs();
memset(dp,-1,sizeof(dp));
long long int ans=dfs(1,1);
printf("%lld\n",ans);
    }
    return 0;
}

Hdu428 漫步校园 2017-01-18 17:43 88人阅读 评论(0) 收藏的更多相关文章

  1. 合并k个已排序的链表 分类: leetcode 算法 2015-07-09 17:43 3人阅读 评论(0) 收藏

    最先想到的是把两个linked lists 合并成一个. 这样从第一个开始一个一个吞并,直到所有list都被合并. class ListNode:# Definition for singly-lin ...

  2. Hadoop入门经典:WordCount 分类: A1_HADOOP 2014-08-20 14:43 2514人阅读 评论(0) 收藏

    以下程序在hadoop1.2.1上测试成功. 本例先将源代码呈现,然后详细说明执行步骤,最后对源代码及执行过程进行分析. 一.源代码 package org.jediael.hadoopdemo.wo ...

  3. HDU1551&&HDU1064 Cable master 2017-05-11 17:50 38人阅读 评论(0) 收藏

    Cable master                                                                            Time Limit: ...

  4. APP被苹果APPStore拒绝的各种原因 分类: ios相关 app相关 2015-06-25 17:27 200人阅读 评论(0) 收藏

    APP被苹果APPStore拒绝的各种原因 1.程序有重大bug,程序不能启动,或者中途退出. 2.绕过苹果的付费渠道,我们之前游戏里的用兑换码兑换金币. 3.游戏里有实物奖励的话,一定要说清楚,奖励 ...

  5. Java中的日期操作 分类: B1_JAVA 2015-02-16 17:55 6014人阅读 评论(0) 收藏

    在日志中常用的记录当前时间及程序运行时长的方法: public void inject(Path urlDir) throws Exception { SimpleDateFormat sdf = n ...

  6. 多校4-Walk Out 分类: 比赛 2015-08-02 17:15 21人阅读 评论(0) 收藏

    Walk Out Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Subm ...

  7. The 3n + 1 problem 分类: POJ 2015-06-12 17:50 11人阅读 评论(0) 收藏

    The 3n + 1 problem Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 53927   Accepted: 17 ...

  8. strace使用详解(转) 分类: shell ubuntu 2014-11-27 17:48 134人阅读 评论(0) 收藏

    (一) strace 命令    用途:打印 STREAMS 跟踪消息. 语法:strace [ mid sid level ] ... 描述:没有参数的 strace 命令将所有的驱动程序和模块中的 ...

  9. 转自知乎,亲民好酒推荐 分类: fool_tree的笔记本 2014-11-08 17:37 652人阅读 评论(0) 收藏

    这里尽量为大家推荐一些符合大众喜好.业内公认好评."即使你不喜欢,你也会承认它不错"的酒款.而且介绍到的酒款还会有一个共同的特征,就是能让你方便的在网上买到. 大概会分为烈酒,利口 ...

随机推荐

  1. 基于 tensorflow 的 mnist 数据集预测

    1. tensorflow 基本使用方法 2. mnist 数据集简介与预处理 3. 聚类算法模型 4. 使用卷积神经网络进行特征生成 5. 训练网络模型生成结果 how to install ten ...

  2. 趣味编程:24点(Haskell版)

    24 game/Solve import Data.List import Data.Ratio import Control.Monad data Expr = Constant Rational ...

  3. 用java编写一个函数,用于计算桌子的面积,可计算任意边长的桌子

    /* *桌子实体类,有属性和方法 */public class Table {    String name; // 声明桌子名称    Double width; // 声明桌子宽度    Doub ...

  4. select top 变量问题

    1.拼接查询语句(SQL2000,2005,2008均可) DECLARE @a AS INT SET @a=1 EXEC('SELECT TOP '+@a+' * FROM mtrcLanguage ...

  5. 域名相关:DNS A记录 NS记录 MX记录 CNAME记录

    1. DNSDNS:Domain Name System 域名管理系统 域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个惟一的IP地址,这一命名的方法或这样管理域名的系统叫做域名管理系统.D ...

  6. 强关联二维材料1T—TaS2晶体

    我校物理系张远波教授课题组通过一种新的实验方法——可控电荷插层,实现了对强关联二维材料1T—TaS2晶体相变的全面研究.1月26日,相关研究论文Gate-tunable phase transitio ...

  7. input限制数字输入

    onkeyup="this.value=this.value.replace(/\D/g,'')"

  8. Mysql优化性能优化21条

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据 ...

  9. Mysql、Oracle、SqlServer的JDBC连接实现和对比(提供驱动包)

    首先,我们需要准备数据库连接所需的jar包.目前mysql的驱动包可能比较好找,但是oracle和sqlserver的有很多,要找到能用的要花一点点心思,这里直接把下载地址和版本发送出来. Mysql ...

  10. ip地址后边加个/8(16,24,32)是什么意思

    是掩码的位数,A类IP地址的默认子网掩码为255.0.0.0(由于255相当于二进制的8位1,所以也缩写成“/8”,表示网络号占了8位);B类的为255.255.0.0(/16);C类的为255.25 ...