• HD200703


    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int n,startx,starty,finx,finy,f[35][35],a[2005],b[2005],c[2005],d[2005],v[2005],dis[35][35];
    int main()
    {
        int i,j,k=1;
        scanf("%d%d%d%d%d",&n,&startx,&starty,&finx,&finy);
        memset(dis,88,sizeof(dis));
        dis[startx][starty]=0;
        int l=n*n;
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                scanf("%d",&f[i][j]);
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
            {
                if(i==n)
                {
                    if(j==n) break;
                    a[k]=i;
                    b[k]=j;
                    c[k]=i;
                    d[k]=j+1;
                    v[k++]=f[i][j+1];
                }
                else
                {
                    if(j==n)
                    {
                        a[k]=i;
                        b[k]=j;
                        c[k]=i+1;
                        d[k]=j;
                        v[k++]=f[i+1][j];
                        continue;
                    }
                    else
                    {
                        a[k]=i;
                        b[k]=j;
                        c[k]=i;
                        d[k]=j+1;
                        v[k++]=f[i][j+1];
                        a[k]=i;
                        b[k]=j;
                        c[k]=i+1;
                        d[k]=j;
                        v[k++]=f[i+1][j];
                        continue;
                    }
                }
            }
        }
        k--;
        for(i=k+1;i<=k*2;i++)
        {
            a[i]=c[i-k];
            b[i]=d[i-k];
            c[i]=a[i-k];
            d[i]=b[i-k];
            v[i]=f[c[i]][d[i]];
        }
        k*=2;
        //for(i=1;i<=k;i++) printf("%d %d %d %d %d
    ",a[i],b[i],c[i],d[i],v[i]); printf("%d",k);
        for(i=1;i<l;i++)
        {
            int check=0;
            for(j=1;j<=k;j++)
            {
                if(dis[c[j]][d[j]]>dis[a[j]][b[j]]+v[j])
                {
                    dis[c[j]][d[j]]=dis[a[j]][b[j]]+v[j];
                    check=1;
                }
            }
            if(check==0) break;
        }
        /*
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
                printf("%d ",dis[i][j]);
            printf("
    ");
        }
        */
        printf("%d",dis[finx][finy]+f[startx][starty]);
        return 0;
    }
    HD200703排雷
    难度级别:B;            运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
    试题描述
    一片战场被划分为N行N列小区域,敌我双方各占据其中一个小区域。
    根据侦察,敌人派出工兵潜入各区域(包括我方和敌方所在区域)布设了地雷。
    现我方侦察兵已经掌握了各片区域的地雷数量。为偷袭敌人,需要寻找一条从我方区域通向敌方区域并且地雷总数最少的路径,执行偷袭任务时,此路净上的地雷都需要排除。
    请你编一个名为MIN的程序,计算出偷袭路径最少需要排雷多少个。
    说明:排雷总数包括我方和敌方所在区域的地雷数。偷袭路径是由一个个区域连接而成,每个区域只能通向上、下、左、右的4个相邻区域。
    输入
    输入第一行只有一个数N,表示每行每列区域个数。1<N<30。 第二行两个数表示我方区域所在的行和列。第三行两个数表示敌方区域所在的行和列。这四个数均为不超过N的正整数。 接下去的N行中,每行有N个数,表示整个战场的地雷分布。每个区域的地雷数均是小于10000的非负整数。
    输出
    输出中只有一个数,即最小排雷数。
    输入示例
    4 2 1 3 3 1 1 1 1 2 9 8 3 8 9 4 2 1 2 3 4
    输出示例
    15

     为什么WA!!!

  • 相关阅读:
    Activiti学习笔记1 — 下载与开发环境的配置
    JavaScript实现本地图片上传前进行裁剪预览
    我国县及县级以上城市编码
    一些小技巧
    NodeJS学习之异步编程
    NodeJS学习之网络操作
    NodeJS学习之文件操作
    Sass和Compass设计师指南
    Sass
    CKEditor配置及使用
  • 原文地址:https://www.cnblogs.com/llllllpppppp/p/7718464.html
Copyright © 2020-2023  润新知