zoukankan      html  css  js  c++  java
  • SDUT 1570 C旅行

    这道题是上学期的上机题,上学期完全看不懂什么意思,其实这个题就是个马拦过河卒的问题,但是我还是没思路。
    water师父告诉我用动态规划可以做,无奈我太愚笨,让他讲了一遍才懂。

    不过效率比water神用动态规划做的提高了15ms.
    仰慕water神用DP做。要注意判断边界。

    题目描述

    Tom和Alice结婚一段时间了,感情非常好,一天他们相约去旅行,终点在遥远的地方。

    地形是非常复杂的,路途是非常曲折的。但我们简化一下是一个矩阵。起点也就是他们家在矩阵的左下角,终点也就是他们要去的遥远的地方在右上角,矩阵行列的交点是他们可以驻足的地方,但是有的却是陷阱,他们是不能从那里通过的。Tom要听Alice的,只会往上或往右走,不往回走,直到终点。

           Alice要Tom提前算出从起点到终点一共有多少条路,可Tom不会啊,所以就找到你了,你是编程高手,希望你帮他解决这个问题,不然他们的婚姻就有危机了。

    输入

        输入数据的第一行是两个正整数H,W(2 < H,W < 20),代表矩阵的高和宽。接下来是一个矩阵,共H行,每行W个元素,用空格隔开,元素取值只有0或1,0表示可以走,1表示是陷阱,数据保证位于起点和终点的元素肯定是0。

    输出

        输出一个整数,即从起点到终点的路径数。

    示例输入

    5 5
    1 1 1 1 0
    0 0 1 1 0
    0 0 0 0 0
    1 0 1 0 1
    0 0 0 0 0

    示例输出

    2
    
    
    View Code
     1 #include<stdio.h>
     2 int d[100][100];
     3 int a[100][100];
     4 int n,m;
     5 int main()
     6 {   
     7     int i,j;
     8     scanf("%d%d",&n,&m);
     9     for(i=1;i<=n;i++)
    10         for(j=1;j<=m;j++)
    11             scanf("%d",&a[i][j]);
    12         d[n][1]=1;
    13         for(i=n;i>=1;i--)
    14             for(j=1;j<=m;j++)
    15             {
    16                 if(a[i][j]==1)
    17             d[i][j]=0;
    18     else if(j==1&&i<n)
    19         d[i][j]=d[i+1][j];
    20     else if(i==n&&j>1)
    21         d[i][j]=d[i][j-1];
    22     else if(i!=n&&j!=1&&a[i][j]!=1)
    23                 d[i][j]=d[i][j-1]+d[i+1][j];
    24             }
    25     printf("%d\n",d[1][m]);
    26     return 0;
    27 } 


     
  • 相关阅读:
    把Asp.net Core程序代码部署到Ubuntu(不含数据库)
    2019周笔记(3.11-3.16)
    利用StackExchange.Redis和Log4Net构建日志队列
    Windows环境下安装配置Mosquitto服务及入门操作介绍
    2019周笔记(2.25-3.01)(压缩数据库)
    2019周笔记(2.18-2.23)
    WinForm客户端限速下载(C#限速下载)
    2019周笔记(2.14-2.17)(聚集索引、非聚集索引)
    高并发场景下秒杀项目静态锁的使用疑问
    线性结构队列以及应用(上)
  • 原文地址:https://www.cnblogs.com/timeship/p/2519803.html
Copyright © 2011-2022 走看看