问题标题: 酷町堂:5102 过河车

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

#include <iostream>

using namespace std;

int dir[9][2]={{0},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2}};

bool vis[11][11];

int f[11][11];

int n,m,x,y;

int main(){

cin>>n>>m>>x>>y;

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

int dx=x+dir[i][0],dy=y+dir[i][1];

if(dx>=0&&dy>=0&&dx<=n&&dy<=m)

vis[dx][dy]=true;

}

f[0][0]=1;

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

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

if(vis[i][j]==true)

continue;

else{

for(int k=i+1;k<=n;k++){

f[i][j]+=f[k][j];

}

for(int k=j+1;k<=m;k++){

f[i][j]+=f[i][k];

}

}

}

}

cout<<f[n][m];

return 0;

}


0
已采纳
汪恺恒
汪恺恒
中级启示者
中级启示者

第二个循环不对吧

for(int i=0;i<=n;i++){
        for(int j=0;j<=m;j++){
            if(!vis[i][j]){
                add(i,j);
            }
        }
    }

add函数的实现

void add(int s,int t){
    for(int l=0;l<s;l++){
        f[s][t]+=f[l][t];
    }
    for(int l=0;l<t;l++){
        f[s][t]+=f[s][l];
    }
}

 

我要回答