zoukankan      html  css  js  c++  java
  • 过河卒

     过河卒

    Time Limit: 1 Sec  Memory Limit: 64 MB
    Submit: 941  Solved: 206

    Description

    棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图中的C点和P1,……,P8,卒不能通过对方马的控制点。棋盘用坐标表示,A点(0,0)、B点(n, m) (n,m为不超过20的整数),同样马的位置坐标是需要给出的,C≠A且C≠B。现在要求你计算出卒从A点能够到达B点的路径的条数。
               1   2   3   4   5   6   7    8
         A +---+---+---o---+---o---+---+----+--------->Y
           |   |   |   |   |   |   |   |    |
         1 +---+---o---+---+---+---o---+----+
           |   |   |   |   |   |   |   |    |
         2 +---+---+---+---C---+---+---+----+
           |   |   |   |   |   |   |   |    |
         3 +---+---o---+---+---+---o---+----+
           |   |   |   |   |   |   |   |    |
         4 +---+---+---o---+---o---+---+----+ B(4,8)
           |
           |
           V
    
           X
    

    Input

    多个测试案例,每个案例一行,处理到文件末尾 B点坐标(n,m)以及对马的坐标(X,Y){不用判错}

    Output

    一个整数(路径的条数)

    Sample Input

    6 6 3 2 

    Sample Output

    17

     这道题本来能算是我的第一个AC的DP,.......要注意两点:1,dp数组用long long来申明;2,别把B的横纵坐标搞混;

    我就死在了这两点上。

     1 #include<stdio.h>
     2 int bx,by;
     3 int hx,hy;
     4 long long dp[50][50];
     5 int main()
     6 {
     7     //freopen("a.txt","r",stdin);
     8     int i,j;
     9     while(scanf("%d%d%d%d",&by,&bx,&hx,&hy)==4)
    10     {
    11 
    12         for(i=0;i<=by+1;i++)
    13             for(j=0;j<=bx+1;j++)
    14             {
    15                 dp[i][j]=0;
    16             }
    17         dp[hx-2+1][hy+1+1]=dp[hx-1+1][hy+2+1]=dp[hx+1][hy+1]=dp[hx+1+1][hy+2+1]=dp[hx+2+1][hy+1+1]=dp[hx-2+1][hy-1+1]=dp[hx-1+1][hy-2+1]=dp[hx+1+1][hy-2+1]=dp[hx+2+1][hy-1+1]=-1;
    18 
    19         dp[1][1]=1;
    20         for(i=1;i<=by+1;i++)
    21             for(j=1;j<=bx+1;j++)
    22             {
    23                 if(dp[i][j]==-1)
    24                     continue;
    25                 dp[i][j]+=dp[i-1][j]+dp[i][j-1];
    26                 if(dp[i-1][j]==-1)
    27                     dp[i][j]+=1;
    28                 if(dp[i][j-1]==-1)
    29                     dp[i][j]+=1;
    30             }
    31       /*  for(i=0;i<=by+1;i++)
    32         {
    33             printf("
    ");
    34             for(j=0;j<=bx+1;j++)
    35                 printf("%-5lld",dp[i][j]);
    36         }
    37         printf("
    ");*/
    38         printf("%lld
    ",dp[by+1][bx+1]);
    39     }
    40     return 0;
    41 }
    View Code
  • 相关阅读:
    xml传数据
    简单实用的GroupBox控件
    漂亮的NavMenu导航控件
    使用设计模式构建通用数据库访问类
    Windows路由表详解
    zz Linux Shell常用技巧(目录)
    Ubuntu Linux 环境变量PATH设置
    zz eclipse.ini内存设置
    find 用法
    zz【java规范】Java spi机制浅谈
  • 原文地址:https://www.cnblogs.com/get-an-AC-everyday/p/4181146.html
Copyright © 2011-2022 走看看