C++60分两个点没过求助
查看原帖
C++60分两个点没过求助
726603
Leibyi_233楼主2022/8/10 14:25
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 24
long long a[MAXN][MAXN]={0};
int b[MAXN][MAXN]={0};
int trans[9][2]{{0,0},{1,2},{1,-2},{2,1},{2,-1},{-1,2},{-1,-2},{-2,1},{-2,-1}};//马的偏移量
int i,j,x,y,hx,hy,sign_x,sign_y;
int main()
{
    cin>>x>>y>>hx>>hy;
    for(i=0;i<9;i++)
    {
        if((hx+trans[i][0])>=0&&(hx+trans[i][0])<=x)
        sign_x=hx+trans[i][0];//在范围内标记马的x
        if(hy+trans[i][1]>=0&&(hy+trans[i][1])<=y)
        sign_y=hy+trans[i][1];//在范围内标记马的y
        b[sign_x][sign_y]=1;
    }
    a[0][0]=1-b[0][0];//确定马有没有可能在{0,0}点上
    for(i=0;i<=x;i++)
    for(j=0;j<=y;j++)
    {
       if(b[i][j]) 
       continue;//被标记则跳过
       if(i)a[i][j]+=a[i-1][j];//用递推,a[i][j]=a[i-1][j]+a[i][j-1]
       if(j)a[i][j]+=a[i][j-1];
    }
    cout<<a[x][y];
    return 0;
}
2022/8/10 14:25
加载中...