NOIP 2002 普及组第四题 过河卒
#include <iostream>
using namespace std;
int mayi[2][9]={{0,-2,-2,-1,-1,1,1,2,2},{0,1,-1,2,-2,2,-2,-1,1}};
long long dp[25][25]={0};
bool mawei[25][25]={0};
int main ()
{
int x,y,max,may;
cin>>x>>y>>max>>may;
mawei[max][may]=1;
for(int i=0;i<=8;i++)
{
int max1=max+mayi[0][i];
int may1=may+mayi[1][i];
if(max1<=x&&may1<=y&&max1>=0&&may1>=0) mawei[max1][may1]=1;
max1=max;
may1=may;
}
dp[0][0]=1;
for(int i=0;i<=x;i++)
{
for(int j=0;j<=y;j++)
{
if(i)
{
dp[i][j]+=dp[i-1][j];
}
if(j)
{
dp[i][j]+=dp[i][j-1];
}
if(mawei[i][j])
{
dp[i][j]=0;
}
}
}
cout <<dp[x][y];
return 0;
}