【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
版权声明同上,考古翻到的