zoukankan      html  css  js  c++  java
  • 【例3.6】过河卒(Noip2002)

    【例3.6】过河卒(Noip2002)

    链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1314
    时间限制: 1000 ms         内存限制: 65536 KB

    【题目描述】

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

    【输入】

    给出n、m和C点的坐标。

    【输出】

    从A点能够到达B点的路径的条数。

    【输入样例】

    8 6 0 4

    【输出样例】

    1617
    题解:因为只有两个方向,可dp,第(i,j)点路径由第(i-1,j)+(i,j-1)点路径得,只要是马的控制点就设为不通,遍历边界时若有控制点则后面都没有路径,当正式遍历时路径变为0,负责-1与1抵消
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    long long mp[25][25];
    int a[8][2]={{1,2},{1,-2},{2,1},{2,-1},{-1,2},{-1,-2},{-2,1},{-2,-1}};
    int main()
    {
        int mx,my,cx,cy;
        cin>>mx>>my>>cx>>cy;
        mp[cx][cy]=-1;
        for(int i=0;i<8;i++)
        {
            int x=cx+a[i][0],y=cy+a[i][1];
            if(x>=0&&x<=mx&&y>=0&&y<=my)mp[x][y]=-1;
        }
        for(int i=0;i<=mx;i++)
            if(mp[i][0]==-1)break;
            else mp[i][0]=1;
        for(int j=0;j<=my;j++)
            if(mp[0][j]==-1)break;
            else mp[0][j]=1;
        for(int i=0;i<=mx;i++)
            for(int j=0;j<=my;j++)
            {
                if(mp[i][j]==-1)mp[i][j]=0;
                else if(i>0&&j>0)mp[i][j]=mp[i-1][j]+mp[i][j-1];
            }
        cout<<mp[mx][my]<<endl;
    }
  • 相关阅读:
    MVC 小demo
    单例模式
    简单工厂模式
    有关ajax中的URL问题
    SqlHelper++
    C# 操作XML
    C# 注册DLL(使用cmd)
    图片延迟加载库Layzr
    解决Ajax跨域问题:Origin xx is not allowed by Access-Control-Allow-Origin.
    HTML5 + SOCKET视频传输
  • 原文地址:https://www.cnblogs.com/EdSheeran/p/7672444.html
Copyright © 2011-2022 走看看