在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.

最新文章

  1. Winform端上传图片到服务器
  2. OpenSSL - 文件和字符MD5加密实现
  3. 我的IT相关网址收藏
  4. 为什么大型网站前端使用PHP后台逻辑用Java
  5. AWR
  6. 比nerdtree更好的文件浏览器:vimfiler
  7. Mysql中查看表的类型InnoDB
  8. 数据库 版本号是 661,打不开。此server支持 655 和更早的版本号。不支持降级路径
  9. js浏览器兼容
  10. org.apache.hadoop.security.AccessControlException: Permission denied: user=?, access=WRITE, inode=&quot;/&quot;:hadoop:supergroup:drwxr-xr-x 异常解决
  11. TSQL:判定一段数组连续的数字段有多少的方案
  12. 使用Linq查找重复
  13. springboot 静态注入 单例
  14. 1-STM32嵌入LUA开发(控制小灯闪耀)
  15. saltStack运维工具的部署及master迁移实现的过程详解
  16. OpenCV支持向量机(SVM)介绍
  17. 非接触IC卡中typeA卡和typeB卡的区别--总结,二者的调制方式和编码方式不同
  18. js判断软键盘是否开启弹出
  19. Node.js-Usage &amp; Example
  20. Merge join、Hash join、Nested loop join对比分析

热门文章

  1. 软技能-代码外的生存指南PDF下载
  2. C++自学教程第一课——你好世界,我是柠檬鲸。
  3. rem和css3的相关知识点
  4. Paper Reading_Distributed System
  5. 网络爬虫之HTTPClient
  6. #define 宏实现函数功能可能存在的问题
  7. HTML弹性布局
  8. 常用的前端框架Angular、React、Vue
  9. 在Linux环境下部署MySql服务
  10. 023-OpenStack 创建实例类型临时磁盘的讲解