2 条题解

  • 0
    @ 2024-11-18 13:58:22

    正确性有待商榷 但是ac

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1005;
    int n,m,K;
    int f[N][N][7];
    int a[N][N];
    int xa,xb,ya,yb;
    int mn[7][N];
    int ans=0x3f3f3f3f;
    int main(){
    	scanf("%d",&n);
    	scanf("%d",&m);
    	scanf("%d",&K);
    	scanf("%d",&xa);
    	scanf("%d",&ya);
    	scanf("%d",&xb);
    	scanf("%d",&yb);
    	memset(mn,0x3f,sizeof(mn));
    	memset(f,0x3f,sizeof(f));
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			scanf("%d",&a[i][j]);
    			f[i][j][0]=abs(xa-i)+abs(ya-j);
    			mn[0][a[i][j]]=min(mn[0][a[i][j]],f[i][j][0]);
    		}
    	}
    	for(int k=1;k<=K;k++){
    		for(int i=1;i<=n;i++){
    			for(int j=1;j<=m;j++){
    				f[i][j][k]=mn[k-1][a[i][j]];
    			}
    		}
    		for(int i=1;i<=n;i++){
    			for(int j=1;j<=m;j++){
    				f[i][j][k]=min(min(min(f[i][j+1][k]+1,f[i][j-1][k]+1),min(f[i-1][j][k]+1,f[i+1][j][k]+1)),f[i][j][k]);
    			}
    		}
    		for(int i=1;i<=n;i++){
    			for(int j=1;j<=m;j++){
    				mn[k][a[i][j]]=min(mn[k][a[i][j]],f[i][j][k]);
    			}
    		}
    	}
    	for(int i=0;i<=K;i++){
    		ans=min(f[xb][yb][i],ans);
    	}
    	cout<<ans;
    	return 0;
    }
    

    信息

    ID
    24
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    120
    已通过
    11
    上传者