#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main(){
int x1,y1,x2,y2;
cin>>x2>>y2>>x1>>y1;
int av[2][9] = {{x1,x1+2,x1+1,x1-1,x1-2,x1-2,x1-1,x1+1,x1+2},{y1,y1+1,y1+2,y1+2,y1+1,y1-1,y1-2,y1-2,y1-1}};
int map[x2][y2]={0};
for(int i=0;i<y2;i++){
map[0][i]=0;
}
map[0][0]=1;
for(int i=0;i<x2+y2;i++){
for(int j=0;j<x2;j++){
int x=j;
int y=i-j;
if(x!=0||y!=0&&x>=0&&y>=0&&x<x2){
if(x>0) map[x][y]+=map[x-1][y];
if(y>0) map[x][y]+=map[x][y-1];
for(int a=0;a<9;a++){
if(x==av[0][a]&&y==av[1][a]) map[x][y]=0;
}
}
}
}
cout<<map[x2-1][y2-1];
return 0;
}
想法:map[x][y]=map[x-1][y]+[x][y-1],如果map[x][y]是?或?的控制点则将map[x][y]设为0.
| 1 | 1 | 1 | 1 | 1 | 1 | 1 |
|---|
| 1 | 2 | ? | 1 | ? | 1 | 2 |
| 1 | ? | 0 | 1 | 1 | ? | 2 |
| 1 | 1 | 1 | ? | 1 | 1 | 3 |
| 1 | ? | 1 | 1 | 2 | ? | 3 |
| 1 | 1 | ? | 1 | ? | 0 | 3 |
| 1 | 2 | 2 | 3 | 3 | 3 | 6 |
不知道为什么过不了