//神题目(题目一开始就理解错了)。。。

题目描述

Why did the cow cross the road? Well, one reason is that Farmer John's farm simply has a lot of roads, making it impossible for his cows to travel around without crossing many of them.

奶牛们为什么要穿马路?一个原因只是因为FJ的牧场的路实在是太多了,使得奶牛们每天不得不穿梭在许许多多的马路中央

FJ's farm is arranged as an N \times NN×N square grid of fields (3 \leq N \leq 1003≤N≤100), with a set of N-1N−1 north-south roads and N-1N−1 east-west roads running through the interior of the farm serving as dividers between the fields. A tall fence runs around the external perimeter, preventing cows from leaving the farm. Bessie the cow can move freely from any field to any other adjacent field (north, east, south, or west), as long as she carefully looks both ways before crossing the road separating the two fields. It takes her TT units of time to cross a road (0 \leq T \leq 1,000,0000≤T≤1,000,000).

FJ的牧场可以看作是一块 N\times NN×N 的田地(3\le N\le 1003≤N≤100),N-1N−1 条南北向的道路和 N-1N−1 条东西向的道路贯穿整个牧场,同时是每块田野的分界线。牧场的最外面是一圈高大的栅栏以防止奶牛离开牧场。Bessie只要穿过分离两块田野的道路,就可以从任何田野移动到与其相邻的田野里去(北,东,南或西)。当然,Bessie穿过每一条马路都是需要TT 时间的。(0\le T\le 1,000,0000≤T≤1,000,000)

One day, FJ invites Bessie to visit his house for a friendly game of chess. Bessie starts out in the north-west corner field and FJ's house is in the south-east corner field, so Bessie has quite a walk ahead of her. Since she gets hungry along the way, she stops at every third field she visits to eat grass (not including her starting field, but including possibly the final field in which FJ's house resides). Some fields are grassier than others, so the amount of time required for stopping to eat depends on the field in which she stops.

有一天,FJ邀请Bessie来他家下棋,Bessie从牧场的西北角出发,FJ的家在牧场的东南角。因为Bessie在中途可能会饿,所以她每走过三块田野就要停下来,享用她所在田野上的新鲜的牧草(不包括Bessie的出发点,但是可能会包括终点FJ的家),牧场上有些田野的牧草长得比其他地方茂盛,所以Bessie对应的停留时间也会变长。

Please help Bessie determine the minimum amount of time it will take to reach FJ's house.

请帮帮Bessie计算出她走到FJ家的最短时间。

输入输出格式

输入格式:

The first line of input contains NN and TT. The next NN lines each contain NN positive integers (each at most 100,000) describing the amount of time required to eat grass in each field. The first number of the first line is the north-west corner.

接下来 NN 行,每行 NN 个数表示每块田野Bessie需要停留的时间(每块最多不超过100,000100,000),第一行的第一块田野是牧场的西北角

输出格式:

Print the minimum amount of time required for Bessie to travel to FJ's house.

一行一个整数表示Bessie走到FJ家的最短时间

输入输出样例

输入样例#1: 复制

4 2
30 92 36 10
38 85 60 16
41 13 5 68
20 97 13 80
输出样例#1: 复制

31

说明

The optimal solution for this example involves moving east 3 squares (eating the "10"), then moving south twice and west once (eating the "5"), and finally moving south and east to the goal.

对于样例,Bessie先向东走过了三块田野(在“10”停留),再向南走两步,又向西走了一步(在“5”停留),最后向南走一步,再向东走一步到达FJ的家(不用停留),总共时间是15(停留时间)+16(穿马路时间)=31

感谢@jzqjzq 提供翻译

题目解释:牛可以往回走

例:    1 ——2——3

  牛可以1->2->1->2;

就可以类比于牛走一步和走三步(但是走一步时的时间也是加上走3步的时间)

将所有的方向枚举出来。。。然后。。宽搜?

没了。。。

(根本没有洛谷原来的题解麻烦嘛)

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
using namespace std;
int n,v[][];
long long dis[][],t;
bool vis[][];
struct node
{
int x,y;
};
int dx[]={,,,-,,,,,-,-,-,-,,,,-};
int dy[]={,-,,,,-,,-,,-,,-,,-,,};
void spfa(int x,int y)
{
queue<node>q;
q.push((node){x,y});
memset(dis,0x7f,sizeof(dis));
dis[x][y]=; vis[x][y]=;
do
{
node u=q.front();q.pop();
vis[u.x][u.y]=;
for(int i=;i<;i++)
{ int tx=u.x+dx[i],ty=u.y+dy[i];
if(tx>=&&tx<=n&&ty>=&&ty<=n)
{
if(dis[tx][ty]>dis[u.x][u.y]+v[tx][ty]+t*)
{
dis[tx][ty]=dis[u.x][u.y]+v[tx][ty]+t*;
if(!vis[tx][ty])
{
vis[tx][ty]=;q.push((node){tx,ty});
}
}
}
}
}while(q.size()!=);
}
int main()
{ ios::sync_with_stdio(false);
cin>>n>>t;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
cin>>v[i][j];
spfa(,);
long long ans;
ans=dis[n][n];//参照题解:牛不可能直接到达,所以得枚举终点3步之内的所有点的值+位移的时间;
ans=min(ans,dis[n][n-]+t);
ans=min(ans,dis[n-][n]+t);
ans=min(ans,dis[n][n-]+t*);
ans=min(ans,dis[n-][n]+t*);
ans=min(ans,dis[n-][n-]+t*);
printf("%lld",ans);
return ;
}

洛谷 P3659 [USACO17FEB]Why Did the Cow Cross the Road I G的更多相关文章

  1. 洛谷 P3660 [USACO17FEB]Why Did the Cow Cross the Road III G(树状数组)

    题目背景 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai<aj<bi<bj的对数 题目描述 The layout of Farmer ...

  2. 洛谷 P3662 [USACO17FEB]Why Did the Cow Cross the Road II S

    P3662 [USACO17FEB]Why Did the Cow Cross the Road II S 题目描述 The long road through Farmer John's farm ...

  3. 洛谷 P3663 [USACO17FEB]Why Did the Cow Cross the Road III S

    P3663 [USACO17FEB]Why Did the Cow Cross the Road III S 题目描述 Why did the cow cross the road? Well, on ...

  4. 【题解】洛谷P3660 [USACO17FEB]Why Did the Cow Cross the Road III

    题目地址 又是一道奶牛题 从左到右扫描,树状数组维护[左端点出现而右端点未出现]的数字的个数.记录每个数字第一次出现的位置. 若是第二次出现,那么删除第一次的影响. #include <cstd ...

  5. 洛谷 P3657 [USACO17FEB]Why Did the Cow Cross the Road II P

    题面 大意:让你把两个n的排列做匹配,连线不想交,而且匹配的数字的差<=4,求最大匹配数 sol:(参考了kczno1的题解)对于第一个排列从左往右枚举,用树状数组维护到达另一个序列第i个数字的 ...

  6. [Luogu3659][USACO17FEB]Why Did the Cow Cross the Road I G

    题目描述 Why did the cow cross the road? Well, one reason is that Farmer John's farm simply has a lot of ...

  7. P3660 【[USACO17FEB]Why Did the Cow Cross the Road III G】

    题外话:维护区间交集子集的小套路 开两个树状数组,一个维护进入区间,一个维护退出区间 $Query:$ 给定询问区间$l,r$和一些其他区间,求其他区间中与$[l,r]$交集非空的区间个数 用上面维护 ...

  8. [USACO17FEB]Why Did the Cow Cross the Road I G

    一开始想写$DP$,发现直接转移完全有后效性 所以本小蒟蒻写了个最短路 每走三步就要吃草是这个题最难搞的地方,我们建图时不妨只对于距离等于三的点连边 考虑完全覆盖所有情况,从一个点走一步,两步,然后三 ...

  9. [USACO17FEB]Why Did the Cow Cross the Road III G

    嘟嘟嘟 首先看到这种序列的问题,我就想到了逆序对,然后就想如何把这道题转化. 首先要满足这个条件:ai <bi.那么我们把所有数按第一次出现的顺序重新赋值,那么对于新的数列,一定满足了ai &l ...

随机推荐

  1. golang之交叉编译设置

    俺的环境,os x,目的,生成64位linux的elf文件 直接下载osx的包就可以,不需要特意去下载源码包,我的go目录是~/golang/go cd ~/golang/go/srcGOOS=lin ...

  2. CSS3 教程 选择器 标记一下防止 要找时404

    客 » Airen的博客 CSS3 选择器——基本选择器 作者:大漠 日期:2011-08-09 点击:6418  CSS的选择器,我想大家并不会陌生吧,因为天天在使用,但对于CSS3的选择器,要运 ...

  3. 深入理解jQuery框架-框架结构

    这是本人结合资料视频总结出来的jQuery大体框架结构,如果大家都熟悉了之后,相信你们也会写出看似高档的js框架: jquery框架的总体结构 (function(w, undefined){ //定 ...

  4. 关于硬件实现FFT逆运算

    前面的文章我们介绍了关于FFT的硬件实现.关于FFT的逆运算IFFT,其实就是将实现FFT的过程反过来执行就可以了. 在实现过程中要注意很多问题. 同 FFT一样,效率问题.以2048点为例,根据理论 ...

  5. FU-A 分包

    FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法 [原创] RFC3984是H.264的baseline码流在RTP方式下传输的规范,这里只讨论FU-A分包方式,以及从RTP包 ...

  6. 让输入的字符转义成html实体的方法

    使用 htmlspecialchars() 函数,代码不会执行,因为会被保存为转义代码 总结测试方法: https://www.cnblogs.com/kaibindirver/p/10321448. ...

  7. java代码数组求平均值,最大值,最小值

    (测试类) package com.badu; public class Tste { public static void main(String[] args) { Class5 sa=new C ...

  8. Java 判断某一天是这一年的第几天

    package Day8_06; import java.util.*; public class ClassTest { public static void main(String[] args) ...

  9. 科普Spark,Spark是什么,如何使用Spark

    科普Spark,Spark是什么,如何使用Spark 1.Spark基于什么算法的分布式计算(很简单) 2.Spark与MapReduce不同在什么地方 3.Spark为什么比Hadoop灵活 4.S ...

  10. buffer cache 深度解析

    本文首先详细介绍了oracle中buffer cache的概念以及所包含的内存结构.然后结合各个后台进程(包括DBWRn.CKPT.LGWR等)深入介绍了oracle对于buffer cache的管理 ...