rqnoj-69

dp(x,y)=dp(x-1,y)+dp(x,y-1)不在马的范围

  =0 在马的范围

#include<iostream>
using namespace std;
long long dp[30][30];
int v[30][30];//数组开的太大会wa
int direct[9][2]={{0,0},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1}};
int n,m,x,y;
void solve()
{
    int i,j;
    dp[0][0]=1;
    for(i=1;i<=n;i++)
        if(!v[i][0])
            dp[i][0]=dp[i-1][0];
    for(i=1;i<=m;i++)
        if(!v[0][i])
            dp[0][i]=dp[0][i-1];
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(!v[i][j])
                dp[i][j]=dp[i-1][j]+dp[i][j-1];
    cout<<dp[n][m]<<endl;
}
int main()
{
    cin>>n>>m>>x>>y;
    for(int i=0;i<9;i++)
    {
        int xx=x+direct[i][0];
        int yy=y+direct[i][1];
        if(xx>=0 && yy>=0 && xx<=n && yy<=m)
            v[xx][yy]=1;
    }
    solve();
    return 0;
}


你可能感兴趣的:(rqnoj-69)