题解:

这题貌似有dalao用了spfa,膜。
蒟蒻只打了记忆化搜索,
设f[x,y,z]表示[1,1]到[x,y],[x,y]颜色为z的最小值花费。

然后就是一波暴搜了,
剪枝:
搜到[x,y]时颜色为z但大于f[x,y,z]就不用继续搜下去。
搜:
①这个点是用魔法去弄的那么离开就要变回去。
下一个点无色而且可用魔法:
②下一个点无色,变成与当前点同色过去,+2过去
③下一个点无色,变成与当前点异色过去,+3过去
下一个点有色:
④与当前点同色,+0过去
⑤与当前点异色,+1过去

constdx:array [1..4] of integer=(1,-1,0,0);dy:array [1..4] of integer=(0,0,-1,1);
varf:array [0..101,0..101,0..1] of longint;a,b:array [0..101,0..101] of longint;i,j,n,m,p,q,pq:longint;function check(aa,bb:longint):boolean;
beginif (aa<1) or (aa>n) or (bb<1) or (bb>n) then exit(false);exit(true);
end;procedure dfs(dep,x,y,rp:longint);
vari,j,k,l,xx,yy:longint;
beginj:=a[x,y];k:=rp;if b[x,y]<>1 then a[x,y]:=2else k:=1;for i:=1 to 4 dobeginxx:=x+dx[i]; yy:=y+dy[i];if check(xx,yy) thenbeginif a[xx,yy]<>2 thenbeginif j=a[xx,yy] thenbeginif f[xx,yy,a[xx,yy]]>f[x,y,j]then beginf[xx,yy,a[xx,yy]]:=f[x,y,j];dfs(f[x,y,j],xx,yy,k);end;endelse beginif f[xx,yy,a[xx,yy]]>f[x,y,j]+1then beginf[xx,yy,a[xx,yy]]:=f[x,y,j]+1;dfs(f[x,y,j]+1,xx,yy,k);end;end;endelse if k=1 thenbeginfor l:=0 to 1 doif f[xx,yy,l]>f[x,y,j]+2+abs(j-l) thenbeginf[xx,yy,l]:=f[x,y,j]+2+abs(j-l);a[xx,yy]:=l;dfs(f[x,y,j]+2+(j-l),xx,yy,0);end;end;end;end;
end;beginreadln(n,m);for i:=1 to n dofor j:=1 to n dobeginf[i,j,0]:=maxlongint;f[i,j,1]:=maxlongint;a[i,j]:=2;end;for i:=1 to m dobeginreadln(p,q,pq);a[p,q]:=pq;b[p,q]:=1;end;f[1,1,a[1,1]]:=0;dfs(0,1,1,1);if (f[n,n,0]=maxlongint) and (f[n,n,1]=maxlongint)then writeln('-1')else if f[n,n,0]>f[n,n,1]then writeln(f[n,n,1])else writeln(f[n,n,0]);
end.

NOIP 2017 普及组 棋盘 chess相关推荐

  1. ◆竞赛题目◆◇NOIP 2017 普及组◇ 图书管理员

    ◇NOIP 2017 普及组◇图书管理员 Description 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个 ...

  2. 【NOIP 2017普及组】 图书管理员

    [NOIP 2017普及组] 图书管理员 题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一 ...

  3. 洛谷——P1548 [NOIP1997 普及组] 棋盘问题

    P1548 [NOIP1997 普及组] 棋盘问题 题目描述 设有一个N \times MN×M方格的棋盘(1≤N≤100,1≤M≤100)(1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个 ...

  4. [NOIP 2011普及组 No.4] 表达式的值

    [NOIP 2011普及组 No.4] 表达式的值 [问题描述] 对于1 位二进制变量定义两种运算: 运算的优先级是: 1. 先计算括号内的,再计算括号外的. 2. "×"运算优先 ...

  5. [NOIP 2010普及组 No.3] 导弹拦截

    [NOIP 2010普及组 No.3] 导弹拦截 [题目描述] 经过11 年的韬光养晦,帝国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截.当工作半径为0 时,则 ...

  6. NOIP 2012 普及组 复赛 culture 文化之旅

    NOIP 2012 普及组 复赛 culture 文化之旅 1.找寻迪杰斯特拉(Dijkstra)算法,难度适中,过程中,找到该题. 2.结合题意,弄懂输入输出样例是关键一步. 3.为了能解决2,纸笔 ...

  7. [NOIP2017 普及组] 棋盘

    [NOIP2017 普及组] 棋盘 题目背景 NOIP2017 普及组 T3 题目描述 有一个m×mm \times mm×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的 ...

  8. NOIP 2011 普及组初赛试题——答案、分析、错题记录

    NOIP 2011 普及组初赛试题 单项选择题-答案 第 1 题 在二进制下,1011001 + ( ) = 1100110. A. 1011 B. 1101 C. 1010 D. 1111 第 2 ...

  9. NOIP 2002 普及组第二题

    [NOIP2002 普及组] 选数 题目描述 已知 n 个整数 x1,x2,x3,xn,以及 1 个整数 k(k<n).从 n 个整数中任选 k个整数相加,可分别得到一系列的和.例如当 n=4, ...

最新文章

  1. 导入数据tf-data
  2. UVA 10519 !! Really Strange !!
  3. Js取float型小数点后两位数的方法
  4. 生产系统遇到的问题:producers blocked
  5. python使用xlrd模块读写excel
  6. JavaScript下的进制转换
  7. 【LeetCode】剑指 Offer 13. 机器人的运动范围
  8. Hadoop中Writable类
  9. python机械臂怎么控制_Python编程语言趣味学,EV3工业机械臂上线
  10. 穷人变富的过程中,最大的阻碍是什么?
  11. oracle ola_Ola HallengrenSQL Server维护解决方案–安装和SQL Server备份解决方案
  12. 序列化和反序列化(八)——Externalizable接口
  13. java 坦克大战 素材_经典90坦克大战素材
  14. linux系统系统安装,深度linux操作系统安装图文教程
  15. ApacheCN 活动汇总 2019.8.30
  16. VirtualBox的菜单栏被隐藏的解决办法
  17. [基本功练习素材]播音初学者资料—口部操,唇舌力量控制;声母韵母难点练习
  18. PJSIP视频通话客户端
  19. 干货:分析学中常用的3种分析方法!
  20. 图片的毛玻璃效果学习

热门文章

  1. 搭建一个普通的网站需要花费多少?
  2. 【EasyUse】关于键盘加速键的几点思考
  3. Navicat管理数据库常用快捷键
  4. Vault部署及创建密钥管理服务
  5. 月薪10k,20k,40k的Java工程师,差别到底在哪?
  6. HTTPS SSL TLS
  7. 程序员当上项目经理的时候!来看看项目经理的素质模型!
  8. 张驰课堂:六西格玛培训工具——箱线图
  9. 数据库运维的一些操作
  10. Mysql实现查询一年内的考勤记录(行转列)