马踏过河卒

  • 时间限制     1000ms
  • 空间限制     32768K

A 点有一个过河卒,需要走到目标 B 点。卒行走规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如上图的 C 点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点。例如上图 C 点上的马可以控制 999 个点(图中的 P1、P2、... 、P8 和 C)。卒不能通过对方马的控制点。

棋盘用坐标表示,A 点(000000)、B 点(BxB_xBxByB_yBy)、CCC 点(CxC_xCxCyC_yCy)(00<Cx<Bx2000<Cy<By20)。现在要求你计算出过河卒从 A 点能够到达 B 点的路径的条数。注:象棋中马走“日”。

样例输入

5 5 2 4

样例输出

14
import java.util.*;

public class Main {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		int bx=sc.nextInt(),by=sc.nextInt();
		int cx=sc.nextInt(),cy=sc.nextInt();
		
		int x[]={-1, 1, 2, 2,-1,-1,-2,-2};
		int y[]={ 2,-2, 1,-1, 2,-2, 1,-1};
		int[][] d=new int[bx+1][by+1];
		int[][] f=new int[bx+1][by+1];
		for(int i=0;i=0&&tx<=bx&&ty>=0&&ty<=by){
				d[tx][ty]=1;
			}
		}
		f[0][0]=1;
		for(int i=0;i<=bx;i++)
		{
			for(int j=0;j<=by;j++)
			{
				if(i!=0&&d[i][j]!=1)
				{
					f[i][j]=f[i][j]+f[i-1][j];
				}
				if(j!=0&&d[i][j]!=1)
				{
					f[i][j]=f[i][j]+f[i][j-1];
				}
			}
		}
		System.out.println(f[bx][by]);
	}

}



你可能感兴趣的:(动态规划)