记录编号 597421 评测结果 AAAAAAAAAA
题目名称 魔法阵 最终得分 100
用户昵称 Gravatar黄天乐 是否通过 通过
代码语言 C++ 运行时间 0.254 s
提交时间 2024-11-27 19:07:48 内存使用 3.32 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int MAXN=55;
int n,m,k1,k2,k;
int vis[MAXN][MAXN];
int a[MAXN][2];
int maxx,ans=1e9;
int cx[5]={0,1,-1,0,0};
int cy[5]={0,0,0,1,-1};
void dfs(int x,int y,int now,int maxx){
    if(vis[x+1][y]&&vis[x-1][y]&&!vis[x][y+1]&&!vis[x][y-1])return ;
    if(!vis[x+1][y]&&!vis[x-1][y]&&vis[x][y+1]&&vis[x][y-1])return ;
    if(maxx>ans)return ;
    if(now<=k){
        a[now][0]=x;
        a[now][1]=y;
    }else maxx=max(maxx,abs(x-a[now-k][0])*k1+abs(y-a[now-k][1])*k2);
    if(now==n*m){
        ans=min(ans,maxx);
        return ;
    }
    for(int i=1;i<=4;i++){
        int curx=x+cx[i];
        int cury=y+cy[i];
        if(!vis[curx][cury]){
            vis[curx][cury]=1;
            dfs(curx,cury,now+1,maxx);
            vis[curx][cury]=0;
        }
    }
}
int main(){
    freopen("mmatrix.in","r",stdin);
    freopen("mmatrix.out","w",stdout);
    vis[1][1]=1;
    cin>>n>>m>>k1>>k2;
    k=n*m/2;
    for(int i=1;i<=n;i++){
        vis[i][0]=vis[i][m+1]=1;
    }
    for(int i=1;i<=m;i++){
        vis[0][i]=vis[n+1][i]=1;
    }
    dfs(1,1,1,0);
    cout<<ans<<endl;
    return 0;
}