HD200703
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,startx,starty,finx,finy,f[][],a[],b[],c[],d[],v[],dis[][];
int main()
{
int i,j,k=;
scanf("%d%d%d%d%d",&n,&startx,&starty,&finx,&finy);
memset(dis,,sizeof(dis));
dis[startx][starty]=;
int l=n*n;
for(i=;i<=n;i++)
for(j=;j<=n;j++)
scanf("%d",&f[i][j]);
for(i=;i<=n;i++)
{
for(j=;j<=n;j++)
{
if(i==n)
{
if(j==n) break;
a[k]=i;
b[k]=j;
c[k]=i;
d[k]=j+;
v[k++]=f[i][j+];
}
else
{
if(j==n)
{
a[k]=i;
b[k]=j;
c[k]=i+;
d[k]=j;
v[k++]=f[i+][j];
continue;
}
else
{
a[k]=i;
b[k]=j;
c[k]=i;
d[k]=j+;
v[k++]=f[i][j+];
a[k]=i;
b[k]=j;
c[k]=i+;
d[k]=j;
v[k++]=f[i+][j];
continue;
}
}
}
}
k--;
for(i=k+;i<=k*;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*=;
//for(i=1;i<=k;i++) printf("%d %d %d %d %d\n",a[i],b[i],c[i],d[i],v[i]); printf("%d",k);
for(i=;i<l;i++)
{
int check=;
for(j=;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=;
}
}
if(check==) break;
}
/*
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d ",dis[i][j]);
printf("\n");
}
*/
printf("%d",dis[finx][finy]+f[startx][starty]);
return ;
}
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!!!
HD200703的更多相关文章
随机推荐
- 【javascript】利用 a 标签自动解析 url
很多时候,我们有从 url 中提取域名,查询关键字,变量参数值等的需求,然而我们可以让浏览器方便地帮助我们完成这一任务而不用写正则去抓取.方法就是先创建一个 a 标签然后将需要解析的 url 赋值给 ...
- maven 如何引入本地jar包
比如我下载了 一.怎么添加jar到本地仓库呢?步骤:1.cmd命令进入该jar包所在路径2.执行命令:mvn install:install-file -Dfile=lucene-queryparse ...
- Java知多少(26)源文件的声明规则
当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则: 一个源文件中只能有一个public类. 一个源文件可以有多个非public类. 源文件的名称应该和pu ...
- Java知多少(49)throw:异常的抛出
到目前为止,你只是获取了被Java运行时系统抛出的异常.然而,程序可以用throw语句抛出明确的异常.Throw语句的通常形式如下: throw ThrowableInstance;这里,Thr ...
- Asp.net常用的三十多个代码(非常实用)
1.//弹出对话框.点击转向指定页面 Response.Write("<script>window.alert('该会员没有提交申请,请重新提交!')</script> ...
- 大杂烩 -- 简析TCP的三次握手与四次分手
基础大杂烩 -- 目录 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - ...
- lsass 病毒手动清除方法
病毒症状进程里面有2个lsass.exe进程,一个是system的,一个是当前用户名的(该进程为病毒).双击D:盘打不开,只能通过右击选择打开来打开.用kaspersky扫描可以扫描出来,并且可以杀掉 ...
- kubernetes-PetSet
什么是Pet?Pet是一个有状态应用程序,本质上它是一个具有确定性名称以及唯一身份的Pod,身份内容包括: DNS中可以识别的固定hostname 顺序化索引(Pet名称组成:PetSetName-O ...
- A - Wall
Once upon a time there was a greedy King who ordered his chief Architect to build a wall around the ...
- java中常用的加密方式
加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些 ...