问题标题: 酷町堂:4391 过河卒

0
0
已解决
汪宇航
汪宇航
新手启示者
新手启示者

#include <iostream>

using namespace std;

long long f[500][500]={

};

int main(){

bool g[500][500];

int m,n,a,b;

cin>>m>>n>>a>>b;

f[0][0]=1;

for(int i=0;i<=m;i++){

for(int j=0;j<=n;j++){

f[0][0]=1;

g[i][j]=0;

g[a-2][b-1]=1,g[a-2][b+1]=1,g[a-1][b-2]=1,g[a-1][b+2]=1,g[a+1][b-2]=1,g[a+1][b+2]=1,g[a+2][b-1]=1,g[a+2][b+1]=1;

if(g[i][j]==1) f[i][j]=0;

else if(i>0&&g[i][0]==0) f[i][0]=f[i-1][0];

else if(j>0&&g[0][j]==0) f[0][j]=f[0][j-1];

else if(i>0&&j>0&&g[i][j]==0) f[i][j]=f[i-1][j]+f[i][j-1];

}

}

cout<<f[m][n];

return 0;

}

Where is 错误?

错误再哪里???


0
已采纳
李显晨
李显晨
中级启示者
中级启示者

你这个写的我看不懂,还是看思路吧

思路:

一、定义状态
f[i][j]表示走到(i,j)点的方案数
二、 递推关系
f[i][j]=f[i-1][j]+f[i][j-1]
三、边界
bool con[5][10]; 标记被控制的点
马在(x,y)这一点,定义dir方向数组 
int dir[9][2]={{0,0},{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}};
for(int i=0;i<9;i++){ 遍历9个方向 
    int dx=x+dir[i][0],dy=y+dir[i][1]; 从(x,y)能一步到达的位置 
    con[dx][dy]=1;
}
if(con[i][j]) f[i][j]=0;
f[0][0]=1;
i==0 f[i][j]=f[i][j-1];
j==0 f[i][j]=f[i-1][j];
i==0&&j==0 f[i][j]=1;

 

我要回答