问题标题: 酷町堂:5100 小马过河

0
0
已解决
陈曦
陈曦
资深天翼
资深天翼
#include<iostream>
using namespace std;
long long m,n,x,y,f[30][30];
long long dir[9][2]={{0},{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}};
bool vis[30][30];
int main(){
    cin>>n>>m>>x>>y;
    for(long long i=1;i<=m;i++){
        vis[i][y]=1;
    }
    for(long long j=1;j<=n;j++){
        vis[x][j]=1;
    }
//    for(int i=1;i<=m;i++){
//        for(int j=1;j<=n;j++){
//            cout<<vis[i][j]<<' ';
//        }
//        cout<<endl;
//    }
    if(vis[0][0]) f[0][0]=0;
    else          f[0][0]=1;
    for(long long i=0;i<=n;i++){
        for(long long j=0;j<=m;j++){
            if(vis[i][j]) continue;
            for(int ii=1;ii<=9;ii++){
                for(int jj=1;jj<=2;jj++){
                    f[i][j]+=dir[ii][jj];
                }
            }
        }
    }
    cout<<f[n][m];
    return 0;
}

只输出1。

发什么都行


0
已采纳
荣光峰
荣光峰
资深光能
资深光能

写的复杂了亿点点

荣光峰在2021-08-22 12:14:34追加了内容

边界:f[0][0]=1

荣光峰在2021-08-22 12:14:39追加了内容

边界:f[0][0]=1

荣光峰在2021-08-22 12:14:44追加了内容

边界:f[0][0]=1

荣光峰在2021-08-22 12:14:49追加了内容

边界:f[0][0]=1

荣光峰在2021-08-22 12:14:56追加了内容

边界:f[0][0]=1

荣光峰在2021-08-22 12:15:00追加了内容

边界:f[0][0]=1

荣光峰在2021-08-22 12:15:23追加了内容

网卡了,sorry

0
刘乐宸
刘乐宸
新手天翼
新手天翼

简单地递推

f[0][0]=1;
    for(int i=0; i<=n;i++) {
        for(int j=0;j<=m;j++) {
            if(i==x || j==y) continue;
            if(i-2>=0&&j-1>=0)f[i][j]+=f[i-2][j-1];
            if(i-1>=0&&j-2>=0) f[i][j]+=f[i-1][j-2];

        }
    }

----------------------------分割线--------------------------------------------

或者写复杂点

for(int i=0;i<9;i++) {
        int nx=x+dir[i][0],ny=y+dir[i][1];
        if(nx>=0&&nx<=n&&ny>=0&&ny<=m)
            b[nx][ny]=true;
    }
    for(int i=0;i<=n;i++) {
        for(int j=0;j<=m;j++) {
            if(i==0 && j==0 || b[i][j]) continue;
            if(i!=0) f[i][j]+=f[i-1][j];
            if(j!=0) f[i][j]+=f[i][j-1];
        }
    }

————————分割线————————————

总之,最后输出的都是f[n][m]

我要回答