Description

有一幅n*n的方格图,n <=100,每个点上有一个值。

从(1,1)出发,走到(n,n),只能走上下左右。

每走一步花费t,每走三步需要花费走完三步后到达格子的值。

求最小花费的值。

Sample Input

4 2

30 92 36 10

38 85 60 16

41 13 5 68

20 97 13 80

Sample Output

31


这题有两种思想,可以强行上一个三维广搜,不过我们也可以用奇技淫巧将第三维省去,因为走三步总共只有16种状态。所以我们就可以强上广搜了。最后只要把那些可以在3步内可以到(n,n)的点特判一下就好了

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define inf 0x7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline int read(){
int x=0,f=1;char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
return x*f;
}
inline void print(int x){
if (x>=10) print(x/10);
putchar(x%10+'0');
}
const int N=1e2;
const int dx[16]={-3,-2,-2,-1,-1,-1,0,0,0,0,1,1,1,2,2,3};
const int dy[16]={0,-1,1,-2,0,2,-3,-1,1,3,-2,0,2,-1,1,0};
struct AC{
int x,y;
void join(int a,int b){x=a,y=b;}
}h[N*N*16+10];
int map[N+10][N+10],dis[N+10][N+10];
bool vis[N+10][N+10];
int n,t;
int in_map(int x,int y){return x>0&&x<=n&&y>0&&y<=n;}
void Bfs(int x,int y){
int head=1,tail=1;
memset(dis,63,sizeof(dis));
h[1].join(x,y),vis[x][y]=1,dis[x][y]=0;
for (;head<=tail;head++){
int nx=h[head].x,ny=h[head].y;
for (int i=0;i<16;i++){
int tx=nx+dx[i],ty=ny+dy[i];
if (!in_map(tx,ty)) continue;
if (dis[tx][ty]>dis[nx][ny]+map[tx][ty]+3*t){
dis[tx][ty]=dis[nx][ny]+map[tx][ty]+3*t;
if (!vis[tx][ty]) h[++tail].join(tx,ty),vis[tx][ty]=1;
}
}
vis[nx][ny]=0;
}
}
int main(){
n=read(),t=read();
for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) map[i][j]=read();
Bfs(1,1);
for (int x=0;x<3;x++)
for (int y=0;y<3;y++)
if (x+y<3)
dis[n][n]=min(dis[n][n],dis[n-x][n-y]+t*(x+y));
printf("%d\n",dis[n][n]);
return 0;
}

[Usaco2017 Feb]Why Did the Cow Cross the Road I (Gold)的更多相关文章

  1. [Usaco2017 Feb]Why Did the Cow Cross the Road II (Gold)

    Description 上下有两个长度为n.位置对应的序列A.B, 其中数的范围均为1~n.若abs(A[i]-B[j])<= 4,则A[i]与B[j]间可以连一条边. 现要求在边与边不相交的情 ...

  2. [Usaco2017 Feb]Why Did the Cow Cross the Road III (Gold)

    Description 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi,求满足ai < aj < bi < bj的对数 Sample Input ...

  3. 4990: [Usaco2017 Feb]Why Did the Cow Cross the Road II 线段树维护dp

    题目 4990: [Usaco2017 Feb]Why Did the Cow Cross the Road II 链接 http://www.lydsy.com/JudgeOnline/proble ...

  4. 4989: [Usaco2017 Feb]Why Did the Cow Cross the Road

    题面:4989: [Usaco2017 Feb]Why Did the Cow Cross the Road 连接 http://www.lydsy.com/JudgeOnline/problem.p ...

  5. [BZOJ4990][Usaco2017 Feb]Why Did the Cow Cross the Road II dp

    4990: [Usaco2017 Feb]Why Did the Cow Cross the Road II Time Limit: 10 Sec  Memory Limit: 128 MBSubmi ...

  6. [BZOJ4989][Usaco2017 Feb]Why Did the Cow Cross the Road 树状数组维护逆序对

    4989: [Usaco2017 Feb]Why Did the Cow Cross the Road Time Limit: 10 Sec  Memory Limit: 256 MBSubmit:  ...

  7. [bzoj4994][Usaco2017 Feb]Why Did the Cow Cross the Road III_树状数组

    Why Did the Cow Cross the Road III bzoj-4994 Usaco-2017 Feb 题目大意:给定一个长度为$2n$的序列,$1$~$n$个出现过两次,$i$第一次 ...

  8. BZOJ4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4997 题意概括 在n*n的区域里,每一个1*1的块都是一个格子. 有k头牛在里面. 有r个篱笆把格 ...

  9. BZOJ4994 [Usaco2017 Feb]Why Did the Cow Cross the Road III 树状数组

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4994 题意概括 给定长度为2N的序列,1~N各处现过2次,i第一次出现位置记为ai,第二次记为bi ...

随机推荐

  1. 深度学习综述(LeCun、Bengio和Hinton)

    原文摘要:深度学习可以让那些拥有多个处理层的计算模型来学习具有多层次抽象的数据的表示.这些方法在很多方面都带来了显著的改善,包含最先进的语音识别.视觉对象识别.对象检測和很多其他领域,比如药物发现和基 ...

  2. 报错** is not accessible due to restriction on required library

    报错: Description Resource Path Location TypeAccess restriction: The type Map<String,Object> is ...

  3. vue 定义全局函数

    方法一:main.js 注入 (1)在main.js中写入函数 Vue.prototype.changeData = function (){ alert('执行成功'); } (2)在所有组件里可调 ...

  4. oracle获取字符串长度函数length()和lengthb()

    oracle获取字符串长度函数length()和lengthb()   lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算st ...

  5. [IT学习]转载python 项目 计算器

    这个是从网上搜到的Python小项目之计算器(原文地址:http://www.2cto.com/kf/201402/279637.html).但该段代码估计是Python 2 写的. 如果你使用的程序 ...

  6. mysql 查询语句去重 通过sql去重

    url 在表中具有唯一性: 由于定时任务的多进程/代码的多线程/定时任务的调度/脚本的执行时间,导致,破坏了唯一性: SELECT COUNT(1) FROM test_error_tmpUNION ...

  7. BootstrapValidator demo

    source:http://bv.doc.javake.cn/api/ BootstrapValidator is the best jQuery plugin to validate form fi ...

  8. 识别jar的编译JDK版本

    解压jar,获取xxx.calss文件 dos命令行javap -verbose classname import java.io.InputStream; import java.io.PrintW ...

  9. bzoj1934: [Shoi2007]Vote 善意的投票&&bzoj2768:[JLOI2010]冠军调查

    get到新姿势,最小割=最大流,来个大佬的PPT 这道题的做法是将st和1的xpy连,0的xpy和ed连,xpy之间jy连双向边,然后呢答案就是最小割. #include<cstdio> ...

  10. bash: crontab: command not found

    操作步骤 1. 确认crontab是否安装: 执行 crontab 命令如果报 command not found,就表明没有安装 2. 安装 crontab 执行 yum install -y vi ...