USACO 2017 FEB Gold visitfj 最短路
题意
有一幅n*n的方格图,n <= 100,每个点上有一个值。从(1,1)出发,走到(n,n),只能走四联通。每走一步花费t,每走三步需要花费走完三步后到达格子的值。求最小花费的值。
拆点,dis[i][j]表示到达第i个点时走的总步数模3等于j时的最小花费值。
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
#include <queue> using namespace std; const int maxn = ;
const int INF = 0x3fffffff;
int n, t, w[maxn][maxn];
struct Node
{
int x, y, z;
Node (int x = , int y = , int z = ):
x(x), y(y), z(z) {}
};
queue <Node> q;
int dx[] = {, , , -}, dy[] = {, -, , };
int dis[maxn][maxn][];
bool vis[maxn][maxn][]; int main()
{
freopen("visitfj.in", "r", stdin);
freopen("visitfj.out", "w", stdout);
scanf("%d %d", &n, &t);
for (int i = ; i <= n; ++i)
for (int j = ; j <= n; ++j)
scanf("%d", &w[i][j]);
for (int i = ; i <= n; ++i)
for (int j = ; j <= n; ++j)
for (int k = ; k < ; ++k)
dis[i][j][k] = INF, vis[i][j][k] = false;
dis[][][] = ;
vis[][][] = true;
q.push(Node(, , ));
while (!q.empty())
{
Node now = q.front();
vis[now.x][now.y][now.z] = false;
q.pop();
for (int i = ; i < ; ++i)
{
int x = now.x+dx[i], y = now.y+dy[i], z = (now.z+)%;
if (x < || y < || x > n || y > n)
continue ;
if (dis[x][y][z] > dis[now.x][now.y][now.z]+t+((z == ) ? w[x][y] : ))
{
dis[x][y][z] = dis[now.x][now.y][now.z]+t+((z == ) ? w[x][y] : );
if (!vis[x][y][z])
vis[x][y][z] = true, q.push(Node(x, y, z));
}
}
}
printf("%d\n", min(dis[n][n][], min(dis[n][n][], dis[n][n][])));
return ;
}
USACO 2017 FEB Gold visitfj 最短路的更多相关文章
- [USACO 2017 Feb Gold] Tutorial
Link: 传送门 A: 分层图最短路(其实就是最短路转移时多记录一维的数据 #include <bits/stdc++.h> using namespace std; #define X ...
- [USACO 2018 Feb Gold] Tutorial
Link: USACO 2018 Feb Gold 传送门 A: $dp[i][j][k]$表示前$i$个中有$j$个0且末位为$k$的最优解 状态数$O(n^3)$ #include <bit ...
- [USACO 2017 Dec Gold] Tutorial
Link: USACO 2017 Dec Gold 传送门 A: 为了保证复杂度明显是从终结点往回退 结果一开始全在想优化建边$dfs$……其实可以不用建边直接$multiset$找可行边跑$bfs$ ...
- [ USACO 2017 FEB ] Why Did the Cow Cross the Road III (Gold)
\(\\\) \(Description\) 给定长度为\(2N\)的序列,\(1\text ~N\)各出现过\(2\)次,\(i\)第一次出现位置记为\(a_i\),第二次记为\(b_i\),求满足 ...
- BZOJ1579 USACO 2009 Feb Gold 3.Revamping Trails Solution
标题效果:一个N积分m无向图边.它可以是路径k右边缘值变0,确定此时1-n最短路径长度. Sol:我以为我们考虑分层图,图复制k+1部分,每间0~k一层.代表在这个时候已经过去"自由边缘&q ...
- USACO 2017 February Gold
那天打cf前无聊练手 T1.Why Did the Cow Cross the Road 题目大意:N*N的矩阵,从左上角走到右下角,走一步消耗T,每走3步消耗当前所在位置上的权值,求最小消耗 思路: ...
- USACO 2017 FEB Platinum nocross DP
题目大意 上下有两个长度为n.位置对应的序列A.B,其中数的范围均为1~n.若abs(A[i]-B[j]) <= 4,则A[i]与B[j]间可以连一条边.现要求在边与边不相交的情况下的最大的连边 ...
- [USACO 2012 Feb Gold] Cow Coupons【贪心 堆】
传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=118 传送门2:http://www.lydsy.com/JudgeOn ...
- BZOJ1577 USACO 2009 Feb Gold 1.Fair Shuttle Solution
权限题,不给传送门啦!在学校OJ上交的.. 有些不开心,又是一道贪心,又是一个高级数据结构的模板,又是看了别人的题解还写崩了QAQ,蒟蒻不需要理由呀. 正经题解: 首先,我们可以由「显然成立法」得出, ...
随机推荐
- iOS中响应者链条-触摸事件,hitTest方法坐标转换
总体来说,分2个步骤: 一,从上到下寻找合适的控件来处理这个触摸事件.如下图,如果点击了黄色4,则UIApplication -> UIWindow -> 1白色 -> 2橙色 -& ...
- go标识符、变量、常量
标识符 标识符是用来表示Go中的变量名或者函数名,以字母或_开头.后可跟着字母.数字. _ 关键字 关键字是Go语言预先定义好的,有特殊含义的标识符. 变量 1. 语法:var identifier ...
- Linux端口占用
1.netstat netstat -anp | grep 23232 Sample: [root@BICServer 0825]# netstat -anp | grep 23232 tcp 0 0 ...
- Postgres中tuple的组装与插入
1.相关的数据类型 我们先看相关的数据类型: HeapTupleData(src/include/access/htup.h) typedef struct HeapTupleData { uint3 ...
- Ubuntu 17.10 用 apt 搭建 lamp 环境(精简版)
这篇文章主要用来快速部署以 php 5.6 为主的 lamp 环境,要看详细安装包括虚拟主机配置的请参考这篇:http://www.cnblogs.com/mingc/p/7864030.html 一 ...
- 设计模式之笔记--职责链模式(Chain of Responsibility)
职责链模式(Chain of Responsibility) 定义 职责链模式(Chain of Responsibility),使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系 ...
- centos7安装lamp
一.准备工作 1. 下载并安装CentOS7.2,配置好网络环境,确保centos能上网,可以获取到yum源. centos7.2的网络配置: vim /etc/sysconfig/network ...
- 制作一棵ztree
我们在做web项目时,常会用到一些树形菜单.在此,我们利用ztree实现树形菜单的效果.zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTr ...
- 美化的select下拉框
ie7浏览器以后的下拉框,给他加上边框样式,是没用的.要是想做出样式好看的下拉框需要用js或者jquery来模拟实现. 代码如下: <div class="r"> &l ...
- js自动检索输入文章长度
1. 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...