NOIP 2017 普及组 棋盘 chess
题解:
这题貌似有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相关推荐
- ◆竞赛题目◆◇NOIP 2017 普及组◇ 图书管理员
◇NOIP 2017 普及组◇图书管理员 Description 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个 ...
- 【NOIP 2017普及组】 图书管理员
[NOIP 2017普及组] 图书管理员 题目描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一 ...
- 洛谷——P1548 [NOIP1997 普及组] 棋盘问题
P1548 [NOIP1997 普及组] 棋盘问题 题目描述 设有一个N \times MN×M方格的棋盘(1≤N≤100,1≤M≤100)(1≤N≤100,1≤M≤100) 求出该棋盘中包含有多少个 ...
- [NOIP 2011普及组 No.4] 表达式的值
[NOIP 2011普及组 No.4] 表达式的值 [问题描述] 对于1 位二进制变量定义两种运算: 运算的优先级是: 1. 先计算括号内的,再计算括号外的. 2. "×"运算优先 ...
- [NOIP 2010普及组 No.3] 导弹拦截
[NOIP 2010普及组 No.3] 导弹拦截 [题目描述] 经过11 年的韬光养晦,帝国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截.当工作半径为0 时,则 ...
- NOIP 2012 普及组 复赛 culture 文化之旅
NOIP 2012 普及组 复赛 culture 文化之旅 1.找寻迪杰斯特拉(Dijkstra)算法,难度适中,过程中,找到该题. 2.结合题意,弄懂输入输出样例是关键一步. 3.为了能解决2,纸笔 ...
- [NOIP2017 普及组] 棋盘
[NOIP2017 普及组] 棋盘 题目背景 NOIP2017 普及组 T3 题目描述 有一个m×mm \times mm×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的 ...
- NOIP 2011 普及组初赛试题——答案、分析、错题记录
NOIP 2011 普及组初赛试题 单项选择题-答案 第 1 题 在二进制下,1011001 + ( ) = 1100110. A. 1011 B. 1101 C. 1010 D. 1111 第 2 ...
- NOIP 2002 普及组第二题
[NOIP2002 普及组] 选数 题目描述 已知 n 个整数 x1,x2,x3,xn,以及 1 个整数 k(k<n).从 n 个整数中任选 k个整数相加,可分别得到一系列的和.例如当 n=4, ...
最新文章
- 导入数据tf-data
- UVA 10519 !! Really Strange !!
- Js取float型小数点后两位数的方法
- 生产系统遇到的问题:producers blocked
- python使用xlrd模块读写excel
- JavaScript下的进制转换
- 【LeetCode】剑指 Offer 13. 机器人的运动范围
- Hadoop中Writable类
- python机械臂怎么控制_Python编程语言趣味学,EV3工业机械臂上线
- 穷人变富的过程中,最大的阻碍是什么?
- oracle ola_Ola HallengrenSQL Server维护解决方案–安装和SQL Server备份解决方案
- 序列化和反序列化(八)——Externalizable接口
- java 坦克大战 素材_经典90坦克大战素材
- linux系统系统安装,深度linux操作系统安装图文教程
- ApacheCN 活动汇总 2019.8.30
- VirtualBox的菜单栏被隐藏的解决办法
- [基本功练习素材]播音初学者资料—口部操,唇舌力量控制;声母韵母难点练习
- PJSIP视频通话客户端
- 干货:分析学中常用的3种分析方法!
- 图片的毛玻璃效果学习