zoukankan      html  css  js  c++  java
  • codevs 3195 发现宝藏

    3195 发现宝藏

    题目描述 Description

    小毛在一块地方发现了一块宝藏,他把这块地方看成为一个a*b的矩阵,有a条南北方向的道路和b条东西方向的道路。南北方向的a条道路从西到东依次编号为l到a,而东西方向的b条道路从南到北依次编号为l到b,南北方向的道路i和东西方向的道路j的交点记为(i,j)。小毛现在在(1,1)入口处,而宝藏点在(a,b)处,他只能沿着道路走,而且为了缩短时间只允许沿着向东和北的方向行驶。现在有n个交叉路口(X1,Yl)、(X2,Y2)……,(Xn,Yn),有大块石头挡路,这些路口是不能行走的,请你帮小毛统计一共有多少种走法到达宝藏点?

    输入描述 Input Description

      第一行包含两个整数a和b(1≤a,b≤16);第二行包含一个正整数n(1≤n≤40),表示有n个路口有大块石头挡路;接下来n行,每行两个整数Xi,Yi,描述路口的位置,以空格隔开。

    输出描述 Output Description

       输出一个整数表示从(1,1)到(a,b)的行走路线总方法数。

    样例输入 Sample Input

    5 4

    3

    2 2

    2 3

    4 2

    样例输出 Sample Output

    5

    题解

    因为只能向右走或向下走,所以从(1,1)到(i,j)的路径条数只与到达(i-1,j)和(i,j-1)的路径条数有关,

    所以转移方程为f[i][j]=f[i-1][j]+f[i][j-1]。

    #include<cstdio>
    using namespace std;
    int f[20][20],a,b,n;
    bool c[20][20];
    int main()
    {
    	int i,j,x,y;
    	scanf("%d%d%d",&a,&b,&n);
    	for(i=1;i<=n;i++)
    	{
    		scanf("%d%d",&x,&y);
    		c[x][y]=1;
    	}
    	f[1][1]=1;
    	for(i=1;i<=a;i++)
    	  for(j=1;j<=b;j++)
    	    if(!f[i][j]&&!c[i][j])
    	      f[i][j]=f[i][j-1]+f[i-1][j];
    	printf("%d",f[a][b]);
    }
    

      

  • 相关阅读:
    从零开始学android开发-通过WebService获取今日天气情况
    android常见错误-E/AndroidRuntime(13678): java.lang.NoClassDefFoundError:
    java 使用相对路径读取文件
    冒泡排序
    快速排序
    为什么使用抽象类?有什么好处?
    为什么用 抽象类,接口
    String.valueOf()
    Python 资源
    文本相似度-BM25算法
  • 原文地址:https://www.cnblogs.com/jyhywh/p/5858961.html
Copyright © 2011-2022 走看看