• 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 } 


     
  • 相关阅读:
    RQNOJ 34 紧急援救
    Codevs 2080 特殊的质数肋骨
    POJ2975 Nim
    Bzoj1016 最小生成树计数
    POJ3613 Cow Relays
    POJ1386 Play on Words
    [从hzwer神犇那翻到的模拟赛题] 合唱队形
    HDU2824 The Euler function
    HDU1576 A/B
    HDU2669 Romantic
  • 原文地址:https://www.cnblogs.com/timeship/p/2519803.html
Copyright © 2020-2023  润新知