Description

经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回。在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼。往下仔细一看,才发现这是一个游乐场,专为旅途中疲惫的人设计。娱乐场可以看成是一块大小为n×m的区域,且这个n×m的区域被分成n×m个小格子,每个小格子中就有一个娱乐项目。然而,小P并不喜欢其中的所有娱乐项目,于是,他给每个项目一个满意度。满意度为正时表示小P喜欢这个项目,值越大表示越喜欢。为负时表示他不喜欢,这个负数的绝对值越大表示他越不喜欢。为0时表示他对这个项目没有喜恶。小P决定将飞艇停在某个小格中,然后每步他可以移动到相邻的上下左右四个格子的某个格子中。小P希望找一条路径,从飞艇所在格出发,最后又回到这个格子。小P有一个习惯,从不喜欢浪费时间。因此,他希望经过每个格子都是有意义的:他到一个地方后,就一定要感受以下那里的惊险和刺激,不管自己是不是喜欢那里的娱乐项目。而且,除了飞艇所在格,其他的格子他不愿意经过两次。小P希望自己至少要经过四个格子。 在满足这些条件的情况下,小P希望自己玩过的娱乐项目的满意度之和最高。你能帮他找到这个最高的满意度之和吗?
Input

输入文件中的第一行为两个正整数n和m,表示游乐场的大小为n×m。因为这个娱乐场很狭窄,所以n和m满足:2<=n<=100,2<=m<=6。 接下来的n行,每行有m个整数,第i行第j列表示游乐场的第i行第j列的小格子中的娱乐项目的满意度,这个满意度的范围是[-1000,1000]。同一行的两个整数之间用空格隔开。
Output

输出文件中仅一行为一个整数,表示最高的满意度之和。
Sample Input

4 4

100 300 -400 400

-100 1000 1000 1000

-100 -100 -100 -100

-100 -100 -100 1000

Sample Output

4000

HINT

大家测下这个数据
5 5
1 1 -100 3 3
1 1 -100 3 3
1 1 -100 3 3
1 1 -100 3 3
1 1 -100 3 3
结果是30?

第二道插头DP,插头DP还是陈丹琦说得好

多看论文有助于各方面知识的提高,看吧

做了两道,感想就是空间一定要开足,你要算出你用多少,我开少了就WA了

每一种情况要搞清楚最好是自己画一下图,讨论一下,在提交之前先自己随机几个大数据,确认没有什么明显的错误再交

  1. var
  2. a:array[..,..]of longint;
  3. f:array[..,..,..]of longint;
  4. flag:array[..]of boolean;
  5. g:array[..,..]of longint;
  6. s,z:array[..]of longint;
  7. n,m,ans:longint;
  8.  
  9. function pd(k:longint):boolean;
  10. var
  11. i,j,save:longint;
  12. begin
  13. j:=;
  14. save:=k;
  15. for i:= to m+ do
  16. begin
  17. s[i]:=k and ;
  18. if s[i]= then exit(false);
  19. if (j>)and(s[z[j]]=)and(s[i]=) then
  20. begin
  21. g[save,z[j]]:=i;
  22. g[save,i]:=z[j];
  23. dec(j);
  24. end
  25. else
  26. if (s[i]=)or(s[i]=) then
  27. begin
  28. inc(j);
  29. z[j]:=i;
  30. end;
  31. k:=k>>;
  32. end;
  33. if j= then exit(true);
  34. exit(false);
  35. end;
  36.  
  37. function max(x,y:longint):longint;
  38. begin
  39. if x>y then exit(x);
  40. exit(y);
  41. end;
  42.  
  43. procedure init;
  44. var
  45. i,j:longint;
  46. begin
  47. read(n,m);
  48. for i:= to n do
  49. for j:= to m do
  50. read(a[i,j]);
  51. fillchar(f,sizeof(f),<<);
  52. f[,m,]:=;
  53. ans:=-maxlongint;
  54. end;
  55.  
  56. procedure work;
  57. var
  58. i,j,k:longint;
  59. begin
  60. for k:= to <<(m<<+)- do
  61. flag[k]:=pd(k);
  62. for i:= to n do
  63. for j:= to m do
  64. if j= then
  65. begin
  66. for k:= to <<(m<<)- do
  67. if flag[k] then
  68. begin
  69. if k and = then
  70. begin
  71. f[i,j,k<<]:=max(f[i-,m,k],f[i,j,k<<]);
  72. f[i,j,k<<+]:=max(f[i-,m,k]+a[i,j],f[i,j,k<<+]);
  73. end
  74. else
  75. if k and = then
  76. begin
  77. f[i,j,k<<]:=max(f[i-,m,k]+a[i,j],f[i,j,k<<]);
  78. f[i,j,k<<-]:=max(f[i-,m,k]+a[i,j],f[i,j,k<<-]);
  79. end;
  80. end;
  81. end
  82. else
  83. begin
  84. for k:= to <<(m<<+)- do
  85. if flag[k] then
  86. begin
  87. if k and(<<(j<<-))= then
  88. begin
  89. if k and(<<(j<<))= then
  90. begin
  91. f[i,j,k+<<(j<<-)]:=max(f[i,j-,k]+a[i,j],f[i,j,k+<<(j<<-)]);
  92. f[i,j,k]:=max(f[i,j,k],f[i,j-,k]);
  93. end
  94. else
  95. if k and(<<(j<<))=<<(j<<) then
  96. begin
  97. f[i,j,k]:=max(f[i,j-,k]+a[i,j],f[i,j,k]);
  98. f[i,j,k-<<(j<<-)]:=max(f[i,j-,k]+a[i,j],f[i,j,k-<<(j<<-)]);
  99. end
  100. else
  101. if k and(<<(j<<))=<<(j<<) then
  102. begin
  103. f[i,j,k]:=max(f[i,j-,k]+a[i,j],f[i,j,k]);
  104. f[i,j,k-<<(j<<-)]:=max(f[i,j-,k]+a[i,j],f[i,j,k-<<(j<<-)]);
  105. end;
  106. end
  107. else
  108. if k and(<<(j<<-))=<<(j<<-) then
  109. begin
  110. if k and(<<(j<<))= then
  111. begin
  112. f[i,j,k]:=max(f[i,j-,k]+a[i,j],f[i,j,k]);
  113. f[i,j,k+<<(j<<-)]:=max(f[i,j-,k]+a[i,j],f[i,j,k]);
  114. end
  115. else
  116. if k and(<<(j<<))=<<(j<<) then f[i,j,k-<<(g[k,j+]<<-)-<<(j<<-)]:=max(f[i,j-,k]+a[i,j],f[i,j,k-<<(g[k,j+]<<-)-<<(j<<-)])
  117. else
  118. if k and(<<(j<<))=<<(j<<) then if k=<<(j<<-) then ans:=max(f[i,j-,k]+a[i,j],ans);
  119. end
  120. else
  121. if k and(<<(j<<-))=<<(j<<-) then
  122. begin
  123. if k and(<<(j<<))= then
  124. begin
  125. f[i,j,k]:=max(f[i,j-,k]+a[i,j],f[i,j,k]);
  126. f[i,j,k+<<(j<<-)]:=max(f[i,j-,k]+a[i,j],f[i,j,k+<<(j<<-)]);
  127. end
  128. else
  129. if k and(<<(j<<))=<<(j<<) then f[i,j,k-<<(j<<-)]:=max(f[i,j-,k]+a[i,j],f[i,j,k-<<(j<<-)])
  130. else
  131. if k and(<<(j<<))=<<(j<<) then f[i,j,k+<<(g[k,j]<<-)-<<(j<<-)]:=max(f[i,j-,k]+a[i,j],f[i,j,k+<<(g[k,j]<<-)-<<(j<<-)]);
  132. end;
  133. end;
  134. end;
  135. write(ans);
  136. end;
  137.  
  138. begin
  139. init;
  140. work;
  141. end.

1187: [HNOI2007]神奇游乐园 - BZOJ的更多相关文章

  1. bzoj 1187: [HNOI2007]神奇游乐园 插头dp

    1187: [HNOI2007]神奇游乐园 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 668  Solved: 337[Submit][Statu ...

  2. 【BZOJ】1187: [HNOI2007]神奇游乐园

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1187 每个格子都具有权值,求任意一个回路使得路径上的权值和最大. 裸的插头DP,注意一下几 ...

  3. bzoj:1187: [HNOI2007]神奇游乐园

    Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一个游乐场,专为旅途中疲惫的人设计. ...

  4. bzoj 1187: [HNOI2007]神奇游乐园【插头dp】

    要判边界!!要判边界!!要判边界!!if(j!=m)!!! 我真是zz横着转移要判断到底能不能向右边出边-- 然后剩下的和1814差不多,九十因为不要求经过所有格子,所以左右括号随时可以合并,但是注意 ...

  5. 【BZOJ1187】[HNOI2007]神奇游乐园 插头DP

    [BZOJ1187][HNOI2007]神奇游乐园 Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细 ...

  6. 洛谷 P3190 [HNOI2007]神奇游乐园 解题报告

    P3190 [HNOI2007]神奇游乐园 Description 给你一个 \(m * n\) 的矩阵,每个矩阵内有个权值\(V(i,j)\) (可能为负数),要求找一条回路,使得每个点最多经过一次 ...

  7. [bzoj1187][HNOI2007]神奇游乐园_插头dp

    bzoj-1187 HNOI-2007 神奇游乐园 题目大意:经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这 ...

  8. 【bzoj1187】 HNOI2007—神奇游乐园

    http://www.lydsy.com/JudgeOnline/problem.php?id=1187 (题目链接) 题意 一个$n*m$的矩阵,其中每一个位置有一个权值,求一条回路使得经过的位置的 ...

  9. BZOJ1187:[HNOI2007]神奇游乐园——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1187 Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现 ...

随机推荐

  1. HttpClient(4.3.5) - Redirect Handling

    HttpClient handles all types of redirects automatically, except those explicitly prohibited by the H ...

  2. Linux 命令 - route: 显示或操作路由表

    route 命令查看路由表或者手动地添加.删除和修改路由表中的条目. 命令格式 route [-CFvnNee] [-A family] route [-v] [-A family] add [-ne ...

  3. C#算法基础之选择排序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. sqlserver关于事务

    事务的四个特性: 原子性,一致性,持久性,隔离性 原子性: 原子性:表示事务执行是作为原子,不可分割,整个语句要么执行,要么不执行sqlserver中每一个单独的语句可以看做是包含在事务中每一句本身具 ...

  5. ios Swift 之github

    1. 软件类 a) 作者集合 http://nondot.org/sabre/ b) swift for facebook SWIFT是一个易于使用的,基于注解的Java来创建勤俭节约序列化类型和服务 ...

  6. 使用ptrace向已运行进程中注入.so并执行相关函数

    这个总结的很好,从前一个项目也用到这中技术 转自:http://blog.csdn.net/myarrow/article/details/9630377 1. 简介 使用ptrace向已运行进程中注 ...

  7. minicsv库的编译错误与解决方案

    有一个项目需要写csv文件以呈现数据.Github上有一个关于csv的轻量级读写库minicsv,于是下载之.但是编译example时出现了以下问题: In file included from ex ...

  8. 关于在DWZ使用ssh后台查询的几种方式

    1.查询所有记录,并以列表形式查询 DaoImpl public PageBean queryByPage(String hql, List<Object> listobj, int pa ...

  9. Redis配置中文翻译,3.2.1版

    大部分常见设置都翻译了,还有一些是从网上复制的(懒) # Redis configuration file example. ## Redis配置文件示例 # # Note that in order ...

  10. 膜拜 2014-2 (献给L之三)

    文/安然 深深的夜静静的想你细细的品味满满的甜蜜爱,心灵的对话让我流泪战栗谢谢你给我这么弥足珍贵的体会不能一生相随又有什么关系你一直都在我的爱就永不停息此生足以——献给心底的爱