【TFLSnoi李志帅】第十⑦篇文章---过河卒

题目链接:https://www.luogu.com.cn/problem/P1002

版权声明:以下代码copy自my teacher 处,如有侵权,请联系删除

原地址:https://www.cnblogs.com/tflsnoi/p/13497857.html

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int bx, by, mx, my;
 4 long long f[25][25];  //f[x][y]表示从A点到达(X,Y)点的路径数,注意数据范围要long long
 5 int m[8][2]={{-1,-2},{-2,-1},{-1,2},{-2,1},{1,-2},{2,-1},{1,2},{2,1}};  //马的控制点
 6 int main()
 7 {
 8     cin>>bx>>by>>mx>>my;   //输入数据 B点坐标和马的坐标
 9 
10     //马的控制点全部设置成-1
11     f[mx][my]=-1;//别忘了马本身也要设置为-1
12     for(int i=0; i<8; i++){
13         int nx=mx+m[i][0];
14         int ny=my+m[i][1];
15         if(nx>=0 && nx<=bx && ny>=0 && ny<=by)//判断是否超出范围
16             f[nx][ny]=-1;
17     }
18 
19     f[0][0]=1;  //A点存放值为1
20     for(int x=1; x<=bx; x++){//初始化X轴上所有点的f[x][y]值
21         if(f[x][0]==-1){     //遇到马的控制点设置为0
22             f[x][0]=0;
23             continue;
24         }
25         f[x][0]=f[x-1][0];
26     }
27     for(int y=1; y<=by; y++){//初始化Y轴上所有点的f[x][y]值
28         if(f[0][y]==-1){     //遇到马的控制点设置为0
29             f[0][y]=0;
30             continue;
31         }
32         f[0][y]=f[0][y-1];
33     }
34 
35     //测试代码
36 //    for(int x=0; x<=bx; x++){
37 //        for(int y=0; y<=by; y++){
38 //            cout<<setw(4)<<f[x][y]<<" ";
39 //        }
40 //        cout<<endl;
41 //    }
42 
43 
44     for(int x=1; x<=bx; x++)
45         for(int y=1; y<=by; y++)
46         {
47             if(f[x][y]==-1){    //遇到马的控制点设置为0
48                 f[x][y]=0;
49                 continue;
50             }
51             f[x][y]=f[x-1][y]+f[x][y-1];
52         }
53 
54     cout<<f[bx][by];
55 
56     return 0;
57 }
58 // 4 8 2 4

但是还有两种方法,见链接:https://www.cnblogs.com/tflsnoi/p/9607521.html

版权声明同上,考古翻到的

posted @ 2020-08-20 16:21  九州霜  阅读(160)  评论(0编辑  收藏  举报