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

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

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

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

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

附蒟蒻丑陋的代码。。。

  1. var n,m,i,j,k,l,x,y,z:longint;
  2. a:array[..,..] of longint;
  3. b:array[..,..] of boolean;
  4. f:array[..,..] of longint;
  5. procedure try(x,y,z,kk:longint);
  6. begin
  7. if (x>m)or(y>m)or(x<)or(y<) then exit;
  8. if b[x,y] then exit;
  9. if z>=f[x,y] then exit;
  10. if (x=m)and(y=m) then
  11. begin
  12. if z<k then k:=z;
  13. exit;
  14. end;
  15. f[x,y]:=z;
  16. inc(l);
  17. b[x,y]:=true;
  18. if a[x,y]= then
  19. begin
  20. if a[x+,y]= then try(x+,y,z,) else
  21. if a[x+,y]= then try(x+,y,z+,) else
  22. if kk= then
  23. begin
  24. a[x+,y]:=;
  25. try(x+,y,z+,);
  26. a[x+,y]:=;
  27. end;
  28. if a[x,y+]= then try(x,y+,z,) else
  29. if a[x,y+]= then try(x,y+,z+,) else
  30. if kk= then
  31. begin
  32. a[x,y+]:=;
  33. try(x,y+,z+,);
  34. a[x,y+]:=;
  35. end;
  36. if a[x-,y]= then try(x-,y,z,) else
  37. if a[x-,y]= then try(x-,y,z+,) else
  38. if kk= then
  39. begin
  40. a[x-,y]:=;
  41. try(x-,y,z+,);
  42. a[x-,y]:=;
  43. end;
  44. if a[x,y-]= then try(x,y-,z,) else
  45. if a[x,y-]= then try(x,y-,z+,) else
  46. if kk= then
  47. begin
  48. a[x,y-]:=;
  49. try(x,y-,z+,);
  50. a[x,y-]:=;
  51. end;
  52. end else
  53. if a[x,y]= then
  54. begin
  55. if a[x+,y]= then try(x+,y,z+,) else
  56. if a[x+,y]= then try(x+,y,z,) else
  57. if kk= then
  58. begin
  59. a[x+,y]:=;
  60. try(x+,y,z+,);
  61. a[x+,y]:=;
  62. end;
  63. if a[x,y+]= then try(x,y+,z+,) else
  64. if a[x,y+]= then try(x,y+,z,) else
  65. if kk= then
  66. begin
  67. a[x,y+]:=;
  68. try(x,y+,z+,);
  69. a[x,y+]:=;
  70. end;
  71. if a[x-,y]= then try(x-,y,z+,) else
  72. if a[x-,y]= then try(x-,y,z,) else
  73. if kk= then
  74. begin
  75. a[x-,y]:=;
  76. try(x-,y,z+,);
  77. a[x-,y]:=;
  78. end;
  79. if a[x,y-]= then try(x,y-,z+,) else
  80. if a[x,y-]= then try(x,y-,z,) else
  81. if kk= then
  82. begin
  83. a[x,y-]:=;
  84. try(x,y-,z+,);
  85. a[x,y-]:=;
  86. end;
  87. end;
  88. b[x,y]:=false;
  89. end;
  90. begin
  91. assign(input,'chess.in');
  92. assign(output,'chess.out');
  93. reset(input);
  94. rewrite(output);
  95. k:=maxlongint div ;
  96. read(m,n);
  97. for i:= to m do
  98. for j:= to m do f[i,j]:=maxlongint;
  99. for i:= to n do
  100. begin
  101. read(x,y,z);
  102. a[x,y]:=z+;
  103. end;
  104. try(,,,);
  105. if k=maxlongint div then write(-) else
  106. write(k);
  107. close(input);
  108. close(output);
  109. 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. Oracle 查看一个数据库实例下面所有的表大小

    1. 因为 oracle有一些 lob字段 在user_extents 里面取出来的结果不是表名, 所以需要与user_lobs 表做关联查询才可以 本来想通过 关联查询来实现, 发现字表查询更简单 ...

  2. ES6生成器与迭代器

    ES6迭代器的一个例子 function run(taskDef) { var task = taskDef(); var result = task.next(); // 递归执行迭代 functi ...

  3. int快读

    昨天偶然间看到CJ_tony的快读,所以便决定学习一下. 这个快读的原理就是:读入单个字符要比读入读入数字快,先读入字符,然后再转化成数字.(原理的话大学再研究) 代码: #include<io ...

  4. Tarjan水题系列(1):草鉴定Grass Cownoisseur [USACO15JAN]or[luogu P3119]

    题目如下: 约翰有n块草场,编号1到n,这些草场由若干条单行道相连.奶牛贝西是美味牧草的鉴赏家,她想到达尽可能多的草场去品尝牧草. 贝西总是从1号草场出发,最后回到1号草场.她想经过尽可能多的草场,贝 ...

  5. nginx重新编译安装upload模块

    由于php处理上传会出现超时,并且显示上传进度官方php不支持nginx+php,所以决定让nginx自己处理上传,我本地环境是mac上已经安装过nginx1.8.0,安装方式为brew,所以需要重新 ...

  6. 08: mysql主从原理

    1.1 mysql主从同步   参考博客:https://www.cnblogs.com/kevingrace/p/6256603.html 1.mysql主从同步(复制)概念 1. 将Mysql某一 ...

  7. HDU - 1845 Jimmy’s Assignment (二分匹配)

    Description Jimmy is studying Advanced Graph Algorithms at his university. His most recent assignmen ...

  8. application详解

    Application对象是HttpApplicationState类的一个实例,Application状态是整个应用程序全局的.本文主要详细介绍Application对象的用法. 一.全局应用程序类 ...

  9. python Rabbitmq编程(一)

    python Rabbitmq编程(一) 实现最简单的队列通信 send端 #!/usr/bin/env python import pika credentials = pika.PlainCred ...

  10. Zabbix--02 自定义监控主机

    目录 一. Zabbix 监控基础架构 二. zabbix 快速监控主机 1.安装zabbix-agent 2.配置zabbix-agent 3.启动zabbix-agent并检查 4.zabbix- ...