@[西兰花馅饺子](/user/292562) 这是为什么
>当卒的位置在B点的下方或在B点的右方时,返回0。
你的思路是错的,递归写法有问题。我觉得参考一下这题题解会对你学习递归有更好的认识。
by Rbu_nas @ 2020-04-14 01:59:12
~~$dp$ 大法好~~
显然您的递归里问题很多。
为何不用 $dp$?
by Kevin5308 @ 2020-04-14 06:34:42
你思路错了。我觉得你应该参考一下题解,那里面讲的不错。
by ChthollyMeow @ 2020-04-14 07:25:31
~~说句闲话,您的Soldier好像拼错了~~
by xrdrsp @ 2020-04-14 07:53:31
思路对了也AC不了,因为这道题需要高精度
by 金庆涵 @ 2020-04-14 07:59:47
高精度?
by whc2020 @ 2020-04-14 08:03:28
ull过得去吧
by djwj233 @ 2020-04-14 08:06:55
@[西兰花馅饺子](/user/292562)
你看看。
你的问题在于,判断和马的位置有问题。
但是即使这样也只有20分,递归太慢了。
```cpp
#include<iostream>
using namespace std;
int Bx, By, Cx, Cy;
const int fx[] = {0, -2, -1, 1, 2, 2, 1, -1, -2};
const int fy[] = {0, 1, 2, 2, 1, -1, -2, -2, -1};
int Solider( int x, int y )
{
if(x>Bx||y>By) return 0;
if( x == Bx && y == By )//判断卒是否到达B点
return 1;
int nx=Cx,ny=Cy,flag=1;
for(int i=1;i<=8;i++)
{
int q=nx+fx[i],w=ny+fy[i];
if(x==q&&y==w) flag=0;
}
if(x==Cx&&y==Cy) flag=0;
if(flag)
return Solider( x+1, y ) + Solider( x, y+1 );
else return 0;
}
int main()
{
cin>>Bx>>By>>Cx>>Cy;
cout<<Solider( 0, 0 )<<endl;
return 0;
}
```
by issue_is_fw @ 2020-04-14 08:08:58
@[西兰花馅饺子](/user/292562) 可以加个记忆化
by LongDouble @ 2020-04-14 08:10:36
@[西兰花馅饺子](/user/292562)
而且你这条语句问题很大
```cpp
return Solider( ++x, y ) + Solider( x, ++y );
```
++x已经改变了x的值,所以你这条语句相当于
```cpp
return Solider( x+1, y ) + Solider( x+1, y+1 );
```
by issue_is_fw @ 2020-04-14 08:11:27