zoukankan      html  css  js  c++  java
  • 洛谷1002 过河卒

    洛谷1002 过河卒

    本题地址: http://www.luogu.org/problem/show?pid=1002

    题目描述

      棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。
      棋盘用坐标表示,A点(0, 0)、B点(n, m)(n, m为不超过20的整数),同样马的位置坐标是需要给出的。
      现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。

    输入输出格式

    输入格式:

    一行四个数据,分别表示B点坐标和马的坐标。

    输出格式:

    一个数据,表示所有的路径条数。

    输入输出样例

    输入样例#1:

    6 6 3 3
    

    输出样例#1:

    6
    

    说明

    结果可能很大!

    题解:这题题意不明,最后调了半天,,,(控制点根本没说明白是什么意思啊)。。。

    不过特别逗,我上来竟然写的是BFS爆搜!。。。。。无语了。。。

    爆炸之后写了一发记忆化,发现我是从(0,0)开始搜的= =

    完了窝的代码能力真的喂狗咯。。。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<algorithm>
     5 #include<stack>
     6 #include<queue>
     7 #include<cstring>
     8 #define PAU putchar(' ')
     9 #define ENT putchar('
    ')
    10 #define MSE(a,b) memset(a,b,sizeof(a))
    11 #define REN(x) for(ted*e=fch[x];e;e=e->nxt)
    12 #define TIL(x) for(int i=1;i<=x;i++)
    13 #define ALL(x) for(int j=1;j<=x;j++)
    14 using namespace std;
    15 const int maxn=20+10;
    16 const int dx[]={0,-1,0};
    17 const int dy[]={0,0,-1};
    18 const int cx[]={0,0,2,1,-1,-2,1,-1,2,-2};
    19 const int cy[]={0,0,1,2,-2,-1,-2,2,-1,1};
    20 bool vis[maxn][maxn];
    21 long long dp[maxn][maxn];
    22 long long ans=0;int n,m;
    23 long long dfs(int x,int y){
    24     long long&res=dp[x][y];if(x==1&&y==1)return res=1;if(vis[x][y])return 0;if(res!=-1)return res;
    25     long long tmp=0;TIL(2){int tx=x+dx[i],ty=y+dy[i];
    26         if(tx&&ty)tmp+=dfs(tx,ty);
    27     }return res=tmp;
    28 }
    29 inline int read(){
    30     int x=0;bool sig=true;char ch=getchar();
    31     for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=false;
    32     for(;isdigit(ch);ch=getchar())x=10*x+ch-'0';return sig?x:-x;
    33 }
    34 inline void write(long long x){
    35     if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;
    36     int len=0;static long long buf[20];while(x)buf[len++]=x%10,x/=10;
    37     for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;
    38 }
    39 int x,y;
    40 int main(){
    41     n=read()+1;m=read()+1;x=read()+1;y=read()+1;
    42     memset(dp,-1,sizeof(dp));
    43     TIL(9){int tx=x+cx[i],ty=y+cy[i];
    44         if(tx&&ty&&tx<=n&&ty<=m)vis[tx][ty]=true;
    45     }write(dfs(n,m));
    46     return 0;
    47 }
  • 相关阅读:
    BZOJ 1576 树剖+LCT
    CF1051D Bicolorings 递推
    CF938D Buy a Ticket dijkstra
    记一次创建svc代理失败
    K8S中Service
    K8S中的Job和CronJob
    K8S中DaemonSet
    Linux expect介绍和用法
    Java根据余弦定理计算文本相似度
    Python和Sublime的整合
  • 原文地址:https://www.cnblogs.com/chxer/p/4749502.html
Copyright © 2011-2022 走看看