在noip考场上本来以为只能骗暴力分,没想到最后A了;

本蒟蒻的做法比较简(zhi)单(zhang):记忆化深搜(考场上本来是想打广搜的,但我深搜稳一点就这样打了);

具体:每个点用一个f数组记录当前位置到这个点的最优值,如果大于等于就跳出,否则更新继续做;

深搜的过程中开个桶记录每个点是否无色,如果无色要注意下个走的点不能有色,如果下个点要走无色的格子,这里可以采取一个贪心的策略:把那个格子的颜色设置成当前这个格子的颜色;

要注意的是:走的过程中是可以向四个方向走的,并且要回溯(我一个dalao同学就忘了回溯才拿了40);

附蒟蒻丑陋的代码。。。

 var n,m,i,j,k,l,x,y,z:longint;
a:array[..,..] of longint;
b:array[..,..] of boolean;
f:array[..,..] of longint;
procedure try(x,y,z,kk:longint);
begin
if (x>m)or(y>m)or(x<)or(y<) then exit;
if b[x,y] then exit;
if z>=f[x,y] then exit;
if (x=m)and(y=m) then
begin
if z<k then k:=z;
exit;
end;
f[x,y]:=z;
inc(l);
b[x,y]:=true;
if a[x,y]= then
begin
if a[x+,y]= then try(x+,y,z,) else
if a[x+,y]= then try(x+,y,z+,) else
if kk= then
begin
a[x+,y]:=;
try(x+,y,z+,);
a[x+,y]:=;
end;
if a[x,y+]= then try(x,y+,z,) else
if a[x,y+]= then try(x,y+,z+,) else
if kk= then
begin
a[x,y+]:=;
try(x,y+,z+,);
a[x,y+]:=;
end;
if a[x-,y]= then try(x-,y,z,) else
if a[x-,y]= then try(x-,y,z+,) else
if kk= then
begin
a[x-,y]:=;
try(x-,y,z+,);
a[x-,y]:=;
end;
if a[x,y-]= then try(x,y-,z,) else
if a[x,y-]= then try(x,y-,z+,) else
if kk= then
begin
a[x,y-]:=;
try(x,y-,z+,);
a[x,y-]:=;
end;
end else
if a[x,y]= then
begin
if a[x+,y]= then try(x+,y,z+,) else
if a[x+,y]= then try(x+,y,z,) else
if kk= then
begin
a[x+,y]:=;
try(x+,y,z+,);
a[x+,y]:=;
end;
if a[x,y+]= then try(x,y+,z+,) else
if a[x,y+]= then try(x,y+,z,) else
if kk= then
begin
a[x,y+]:=;
try(x,y+,z+,);
a[x,y+]:=;
end;
if a[x-,y]= then try(x-,y,z+,) else
if a[x-,y]= then try(x-,y,z,) else
if kk= then
begin
a[x-,y]:=;
try(x-,y,z+,);
a[x-,y]:=;
end;
if a[x,y-]= then try(x,y-,z+,) else
if a[x,y-]= then try(x,y-,z,) else
if kk= then
begin
a[x,y-]:=;
try(x,y-,z+,);
a[x,y-]:=;
end;
end;
b[x,y]:=false;
end;
begin
assign(input,'chess.in');
assign(output,'chess.out');
reset(input);
rewrite(output);
k:=maxlongint div ;
read(m,n);
for i:= to m do
for j:= to m do f[i,j]:=maxlongint;
for i:= to n do
begin
read(x,y,z);
a[x,y]:=z+;
end;
try(,,,);
if k=maxlongint div then write(-) else
write(k);
close(input);
close(output);
end.

洛谷p3956 棋盘(NOIP2017 t3)的更多相关文章

  1. 2017普及组D1T3 洛谷P3956 棋盘

    2017普及组D1T3 洛谷P3956 棋盘 原题 题目描述 有一个m×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在 ...

  2. 洛谷 P3956 棋盘 解题报告

    P3956 棋盘 题目描述 有一个\(m×m\)的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能 ...

  3. 洛谷 P3956 棋盘(BFS)

    传送门:Problem P3956 https://www.cnblogs.com/violet-acmer/p/9827010.html 题解: BFS 相关变量解释: color[maxn][ma ...

  4. 洛谷 P3956 棋盘

    题目描述 有一个m ×m的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色的(不能是无色的), 你只能向上 ...

  5. 洛谷 P3956 棋盘(记忆化搜索)

    嗯... 题目链接:https://www.luogu.org/problem/P3956 这是一道比较好搜的题,注意一些剪枝.预处理和魔法的处理问题(回溯). AC代码: #include<c ...

  6. 洛谷 P3956 棋盘 题解

    每日一题 day5 打卡 Analysis 深搜+剪枝+瞎jb判断 1.越界 2.这个点无色 3.当前的价值已经比答案大 三种情况要剪枝 我搜索里判断要不要施法的时候没判断上一次有没有施法,白调了0. ...

  7. 洛谷P3957 跳房子(Noip2017普及组 T4)

    今天我们的考试就考到了这道题,在考场上就压根没有思路,我知道它是一道dp的题,但因为太弱还是写不出来. 下来评讲的时候知道了一些思路,是dp加上二分查找的方式,还能够用单调队列优化. 但看了网上的许多 ...

  8. 洛谷P1436 棋盘分割

    洛谷题目链接 动态规划: 我们设状态$f[i][j][o][p][k]$表示一个矩形,左上角顶点坐标为$(i,j)$,右下角顶点坐标为$(o,p)$时分割了$k$次,也就是说现在是$k+1$块 我们考 ...

  9. 【洛谷p3956】棋盘

    日常blog(✧◡✧) 棋盘[题目链接] 算法: 然后这是2017普及组: first.关于颜色处理:让c[i][j]=color+1:这样无色=0,红色=1,黄色=2: 然后其实是记忆化,将记答案的 ...

随机推荐

  1. 常用获取Android崩溃日志和IOS崩溃日志的几种方法

    一:前言 在日常测试app时,经常会遇到崩溃问题,测试快速抓取到崩溃日志可以有效方便开发进行定位,快速解决问题所在测试做到测试分析,定位是非常重要的,这也是判断一个测试能力指标的一大维度. 二:And ...

  2. LeetCode算法题-Maximize Distance to Closest Person(Java实现)

    这是悦乐书的第328次更新,第351篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第198题(顺位题号是849).在一排座位中,1表示一个人坐在该座位上,0表示座位是空的 ...

  3. LeetCode算法题-Flipping an Image(Java实现)

    这是悦乐书的第324次更新,第347篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第194题(顺位题号是832).给定二进制矩阵A,我们想要水平翻转图像,然后反转它,并返 ...

  4. Scratch少儿编程系列:(七)太阳系八大行星的运转

    一.程序说明 本程序用来模拟太阳系八大行星的运转过程. 二.程序流程图 为了更直观的描述上述过程,采用流程图的方式将猜数字的过程进行描述. 还在制作中... 三.制作过程 1. 场景和角色的选择 场景 ...

  5. HDU4372(第一类斯特林数)

    题意:N座高楼,高度均不同且为1~N中的数,从前向后看能看到F个,从后向前看能看到B个,问有多少种可能的排列数. 0 < N, F, B <= 2000 首先我们知道一个结论:n的环排列的 ...

  6. 【Python】利用豆瓣短评数据生成词云

    在之前的文章中,我们获得了豆瓣爬取的短评内容,汇总到了一个文件中,但是,没有被利用起来的数据是没有意义的. 前文提到,有一篇微信推文的关于词云制作的一个实践记录,准备照此试验一下. 思路分析 读文件 ...

  7. IntelliJ IDEA 快捷键终极大全

    自动代码 常用的有fori/sout/psvm+Tab即可生成循环.System.out.main方法等boilerplate样板代码 . 例如要输入for(User user : users)只需输 ...

  8. 通过proxychains实现Ubuntu终端代理

    1.在终端内使用代理,需要使用proxychains: sudo apt-get install proxychains 2.编辑 /etc/proxychains.conf sudo gedit / ...

  9. Linux rsync 远程同步部署篇

    rsync官网: www.samba.org/ftp/rsync.html端口:873上机实战系列项目100台规模集群全网数据备份解决方案3.本项目提供免费实战讲解视频:Linux集群全网服务器数据备 ...

  10. 如何在ubuntu上安装 搜狗输入法(已经成功)

    转自:https://blog.csdn.net/qq_37589838/article/details/81208409 本文链接:https://blog.csdn.net/qq_37589838 ...