~~我能来暖楼吗???~~
by Baiwhiter @ 2019-04-23 13:44:27
~~long long a[m+1][n+1]={};~~
???
by Baiwhiter @ 2019-04-23 13:46:21
# 建议开一个dp数组
by Baiwhiter @ 2019-04-23 13:55:50
@[梦曦酱](/space/show?uid=198718) 楼主在不在
by Strong_Jelly @ 2019-04-23 14:15:50
原本的思路是将数组全初始化为1
再将马可跳的数变为0
靠a[m][n]=a[m][n-1]+a[m-1][n]计算
递推到a[m][n]出结果
by 梦曦酱 @ 2019-04-24 12:56:09
现在的代码如下```cpp
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int m,n;
int oi=op=0;
scanf("%d%d",&m,&n);
long long a[m+1][n+1]={};
for(op=0;op<=n;op++)
{
for(oi=0;oi<=m;oi++)
{
a[oi][op]=1;
}
}
int o,p;
scanf("%d%d",&o,&p);
a[o][p]=0;
if(o-1>=0&&p-2>=0)a[o-1][p-2]=0;
if(o+1<=n&&p-2>=0)a[o+1][p-2]=0;
if(o-2>=0&&p-1>=0)a[o-2][p-1]=0;
if(o+2<=n&&p-1>=0)a[o+2][p-1]=0;
if(o-2>=0&&p+1<=m)a[o-2][p+1]=0;
if(o+2<=n&&p+1<=m)a[o+2][p+1]=0;
if(o-1>=0&&p+2<=m)a[o-1][p+2]=0;
if(o+1<=n&&p+2<=m)a[o+1][p+2]=0;
a[2][1]=a[1][2]=1;
for(op=1;op<=n;op++)
{
if(a[1][op-1]=0) a[1][op]=0;
}
for(oi=1;oi<=m;oi++)
{
if(a[oi-1][1]=0) a[oi][1]=0;
}
for(op=2;op<=n;op++)
{
for(oi=2;oi<=m;oi++)
{
if(a[oi][op]==0) a[oi][op]=0;
else a[oi][op]=a[oi-1][op]+a[oi][op-1];
}
}
printf("%d",a[m][n]);
return 0;
}
```
by 梦曦酱 @ 2019-04-24 12:57:38
AC一个点 2333
```c
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[25][25];
int dp[25][25];
int main() {
int m,n;
memset(dp,0,sizeof(dp));//清空dp数组
memset(a,1,sizeof(a));//地图初始化
int oi,op;
int o,p;
scanf("%d %d %d %d",&m,&n,&o,&p);
//for(op=1;op<=n;op++)
//{
// for(oi=1;oi<=m;oi++)
// {
// a[oi][op]=1;
// }
//}
a[o][p]=0;
if(o-1>=0&&p-2>=0)a[o-1][p-2]=0;
if(o+1<=n&&p-2>=0)a[o+1][p-2]=0;
if(o-2>=0&&p-1>=0)a[o-2][p-1]=0;
if(o+2<=n&&p-1>=0)a[o+2][p-1]=0;
if(o-2>=0&&p+1<=m)a[o-2][p+1]=0;
if(o+2<=n&&p+1<=m)a[o+2][p+1]=0;
if(o-1>=0&&p+2<=m)a[o-1][p+2]=0;
if(o+1<=n&&p+2<=m)a[o+1][p+2]=0;//马占领
//a[2][1]=a[1][2]=1;
//for(op=1;op<=n;op++)
//{
// if(a[1][op-1]=0) a[1][op]=0;
//}
//for(oi=1;oi<=m;oi++)
//{
// if(a[oi-1][1]=0) a[oi][1]=0;
//}多余了
dp[1][0]=1;//第一步
for(op=1;op<=n+1;++op)
{
for(oi=1;oi<=m+1;++oi)
{
dp[op][oi]=dp[op-1][oi]+dp[op][oi-1];//dp
if(a[oi-1][op-1]==0) dp[op][oi]=0;//马控制的点不算步
}
}
printf("%d",dp[m+1][n+1]);//右下挪一下
return 0;
}
```
by Baiwhiter @ 2019-04-24 13:52:52