一开始想写$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. 在laravel中,使用DB查询数据库后,返回的对象,可以用下面的办法变为数组

    $nodes = Db::table('account')->orderBy('sort', 'asc')->orderBy('id' ,'asc')->get()->map( ...

  2. windows10中远程登录ubuntu16.04的桌面

      1. 安装xrdp sudo apt-get install xrdp 2. 安装vnc4server sudo apt-get install vnc4server tightvncserver ...

  3. nginx mp3

    location /mp3 { alias "d:/mp3"; default_type audio/mpeg; autoindex on; }

  4. 使用Metasploit绕过UAC的多种方法

      一.用户帐户控制(UAC)简介 在本文中,我们将简要介绍一下用户帐户控制,即UAC.我们还将研究它如何潜在地保护免受恶意软件的攻击并忽略UAC提示可能给系统带来的一些问题. 1.什么是用户帐户控制 ...

  5. 四、spring boot 1.5.4 日志管理

    spring boot日志默认采用logback进行输出,你可以对logback进行定制化,方法如下: 在resources文件夹下建立logback.xml配置文件 <?xml version ...

  6. PostgreSQL(一)教程 -----从头开始

    一.安装 自然,在你能开始使用PostgreSQL之前, 你必须安装它.PostgreSQL很有可能已经安装到你的节点上了, 因为它可能包含在你的操作系统的发布里, 或者是系统管理员已经安装了它.如果 ...

  7. bzoj1485: [HNOI2009]有趣的数列(Catalan数)

    一眼卡特兰数...写完才发现不对劲,样例怎么输出$0$...原来模数不一定是质数= =... 第一次见到模数不是质数的求组合数方法$(n,m\leq 10^7)$,记录一下... 先对于$1$~$n$ ...

  8. 界面编程之QT的文件操作20180729

    /*******************************************************************************************/ 一.QT文件 ...

  9. linux下c语言实现双进程运行

    题目 编写一个Linux C程序,在主进程中创建一个子进程,子进程中死循环输出“Hello CSU”字符串,主进程休眠10s后,向子进程发送信号结束子进程,随后主进程退出.(用信号实现进程间的通信,k ...

  10. 流媒体技术学习笔记之(十)HLS协议直播延时优化(35s到10S)

    1.首先要了解HLS延时的机制,也就是为什么会延时,延时主要发生在什么地方. HTTP Live Streaming 并不是一个真正实时的流媒体系统,这是因为对应于媒体分段的大小和持续时间有一定潜在的 ...