一开始想写$DP$,发现直接转移完全有后效性

所以本小蒟蒻写了个最短路

每走三步就要吃草是这个题最难搞的地方,我们建图时不妨只对于距离等于三的点连边

考虑完全覆盖所有情况,从一个点走一步,两步,然后三步,和直接走三步代价是等价的

这样从每个点到与其曼哈顿距离为三的所有点连边即可

考虑到终点的答案,对于所有小于三步到终点的位置到终点的代价,找到最小值即为答案

有个坑就是比如右左右这种走法,我们也需要从一个点向其周围的点连边

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define int long long
using namespace std;
const int maxn=;
struct edge{
int next,to,dis;
}e[*maxn];
int n,t,g[][],len[maxn],head[maxn],cnt,ans=1e9;
int dx[]={-,-,-,-,-,,,,,,,,,,,-};
int dy[]={-,-,,,,-,-,-,,,,,,,-,};
bool exist[maxn];
inline void add(int x,int y,int d)
{
e[++cnt].next=head[x];
e[cnt].to=y;
e[cnt].dis=d;
head[x]=cnt;
}
inline int make(int x,int y)
{
return x*n+y;
}
int dijkstra()
{
priority_queue<pair<int,int> >q;
memset(len,0x3f,sizeof(len));
q.push(make_pair(,make(,)));
len[make(,)]=;
while(!q.empty())
{
int u=q.top().second;
q.pop();
if(exist[u])
continue;
exist[u]=;
for(int v,i=head[u];i;i=e[i].next)
if(len[v=e[i].to]>len[u]+e[i].dis)
{
len[v]=len[u]+e[i].dis;
q.push(make_pair(-len[v],v));
}
}
}
void check(int x,int y)
{
for(int i=;i<;i++)
if(x+dx[i]>&&x+dx[i]<=n&&y+dy[i]>&&y+dy[i]<=n)
add(make(x,y),make(x+dx[i],y+dy[i]),*t+g[x+dx[i]][y+dy[i]]);
}
signed main()
{
scanf("%lld%lld",&n,&t);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
scanf("%lld",&g[i][j]);
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
check(i,j);
dijkstra();
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
if(*n-i-j<)
ans=min(ans,len[make(i,j)]+(*n-i-j)*t);
printf("%lld\n",ans);
return ;
}

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

  1. 洛谷 P3659 [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 far ...

  2. [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 ...

  3. 洛谷 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 ...

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

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

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

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

  6. [USACO17FEB]Why Did the Cow Cross the Road III G (树状数组,排序)

    题目链接 Solution 二维偏序问题. 现将所有点按照左端点排序,如此以来从左至右便满足了 \(a_i<a_j\) . 接下来对于任意一个点 \(j\) ,其之前的所有节点都满足 \(a_i ...

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

    Link 题意: 给定长度为 \(2N\) 的序列,\(1~N\) 各处现过 \(2\) 次,i第一次出现位置记为\(ai\),第二次记为\(bi\),求满足\(ai<aj<bi<b ...

  8. 洛谷 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 ...

  9. 洛谷 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 ...

随机推荐

  1. SpringBoot 5.SpringBoot小知识讲解

    1.修改 server 端口: 在 application.properties 中添加 server.port=9090,我们的端口号就会变成9090了. 2.自定义配置Web: 2.1 创建 Cu ...

  2. Java微信二次开发(一)

    准备用Java做一个微信二次开发项目,把流程写在这里吧. 第一天,做微信请求验证 需要导入库:servlet-api.jar 第一步:新建包com.wtz.service,新建类LoginServle ...

  3. Java之可变参数方法使用说明

    代码: package test_demo; /* * 可变参数函数说明 * 传入指定数据类型的数组 * 优先匹配固定长度函数 * */ public class VarArgsDemo { // 可 ...

  4. 【loj6029】「雅礼集训 2017 Day1」市场 线段树+均摊分析

    题目描述 给出一个长度为 $n$ 的序列,支持 $m$ 次操作,操作有四种:区间加.区间下取整除.区间求最小值.区间求和. $n\le 100000$ ,每次加的数在 $[-10^4,10^4]$ 之 ...

  5. idea log4j 用法

    1.导入jar包 这里用的maven导入 <!-- LOGGING begin --> <dependency> <groupId>org.slf4j</gr ...

  6. debian9部署ownCloud

    ownCloud是一个开源的私有云存储,支持外接存储,具有良好的扩展性.ownCloud是传统的C/S架构,支持目前各大流行平台.服务端客户端实时同步,使用体验非常好. ownCloud is Wed ...

  7. 内置函数sorted()

    这里顺便说一下sorted()和sort()的异同. sort 是 list 中的方法,只能对列表排序:sorted 可以对所有可迭代对象进行排序. list 的 sort 方法是对原列表进行操作,而 ...

  8. Spark记录-Scala异常处理与文件I/O

    Scala的异常处理类似许多其他语言(如Java).它不是以正常方式返回值,方法可以通过抛出异常来终止. 但是,Scala实际上并没有检查异常. 当您想要处理异常时,要像Java一样使用try {.. ...

  9. bzoj千题计划264:bzoj3884: 上帝与集合的正确用法

    http://www.lydsy.com/JudgeOnline/problem.php?id=3884 欧拉降幂公式 #include<cmath> #include<cstdio ...

  10. bzoj千题计划256:bzoj2194: 快速傅立叶之二

    http://www.lydsy.com/JudgeOnline/problem.php?id=2194 相乘两项的下标 的 差相同 那么把某一个反过来就是卷积形式 fft优化 #include< ...