题目链接

思路
对N*N网格中所有点进行搜索(dfs),搜索过程中对每一步进行记忆化存储,即dp数组保存从当前点开始可获得的最高得分,若后面需要用到前面计算过的数据,直接读取dp数组即可。

  • dp[i][j]表示从点(i,j)出发可获得的最高得分。

由于本题需要输出最小的路线,所以在搜索过程中要注意,得分相同的两条路要考虑所在点的数字大小。
路径的记录用结构体保存。
不要忘了比较得分相同的起点中,哪个点的数字最小!
代码:

#include <iostream>
#include <cstring>
using namespace std;
int farm[370][370]={0},dp[370][370];
int nxtx[8]={2,1,-1,-2,-2,-1,1,2};
int nxty[8]={1,2,2,1,-1,-2,-2,-1};
int n;
struct nextStep { int x, y; }node[370][370]; //存储后继结点坐标
int dfs(int x, int y)
{if(dp[x][y]!=0) return dp[x][y];int maximum = /*farm[x][y]*/ 1;int minx = x + nxtx[0], miny = y + nxty[0]; // 记录farm值最小的坐标for(int i=0 ; i<8 ; i++){int tx = x + nxtx[i];int ty = y + nxty[i];if(tx<=n && tx>=1 && ty<=n && ty>=1 && farm[x][y] < farm[tx][ty]){//maximum = max(maximum , dfs(tx,ty)+1);if(maximum<dfs(tx,ty)+1){maximum = dfs(tx,ty)+1;node[x][y].x = tx, node[x][y].y = ty;minx = tx, miny = ty;}//相同时选farm值最小的else if(maximum==dfs(tx,ty)+1 && farm[minx][miny] > farm[tx][ty]){node[x][y].x = tx, node[x][y].y = ty;minx = tx, miny = ty;}}}return dp[x][y] = maximum;
}
int main()
{ios::sync_with_stdio(false);int i, j;memset(node,0,sizeof(node));cin >> n;for(i=1 ; i<=n ; i++)for(j=1 ; j<=n ; j++)cin >> farm[i][j];int maxscore=0, max_x, max_y; //最高得分,即最终结果;最终结果的x,y坐标for(i=1 ; i<=n ; i++){for(j=1 ; j<=n ; j++){if(dp[i][j]!=0) continue;dp[i][j] = dfs(i,j); //每个起始点的得分赋给dp[i][j]//maxscore = max(maxscore , dp[i][j]);if(maxscore < dp[i][j]){maxscore = dp[i][j];max_x = i, max_y = j;}//相同时选farm值最小的else if(maxscore == dp[i][j] && farm[max_x][max_y]>farm[i][j])max_x = i, max_y = j;}}cout<<maxscore<<endl;for(int t=0 ; t<maxscore ; t++){   //输出路径cout<<farm[max_x][max_y]<<endl;int tx = max_x, ty = max_y;max_x = node[tx][ty].x;max_y = node[tx][ty].y;}return 0;
}

POJ 2111 Millenium Leapcow(记忆化搜索+dfs记录路径)相关推荐

  1. 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof

    题目传送门 1 /* 2 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 3 ans = min (ans, max (dp[x][y-i], dp[x-1][i ...

  2. POJ 2111 Millenium Leapcow (搜索)

    题意:类似滑雪,找出最长路劲,多个答案 输出字典序最小的. 思路:将矩阵上的数字从大到小排序,贪心找路劲..复杂度O(n*n*logn) #include <iostream> #incl ...

  3. Pearls POJ - 1260(区间记忆化搜索)

    题意: n件物品,给出数量和价格,(注意数量和价格都是升序给出的这个是能DP的关键),要买掉所以商品 对于每类物品,所需要的价格是(a[i]+10)*p[i] ,即要多买10件,也可以把价格低的物品合 ...

  4. POJ - 2111 Millenium Leapcow(从最大出发到最小,再反向记录路径)

    题目链接:https://cn.vjudge.net/contest/321389#problem/F 翻译: 任意寻一个点,按照国际象棋的走法,同时下一个点的值必须大于前一个点的值,找到一条最长路径 ...

  5. 记忆化搜索例题 记忆化搜索

    1.poj  1579 题目链接: http://poj.org/problem?id=1579 代码如下: #include <cstdio> #include <cstring& ...

  6. 【DP】【记忆化搜索】NIKOLA(jzoj 1150)

    NIKOLA 题目大意: NIKOLA画了一排数字,他一开始在1,他可以往前跳T+1格(T为上一次跳到此格跳的格数),或往后T格(T一开始为0),但不能跳出界,没跳到一个格子,就要加上此格子的值(一开 ...

  7. 山东省第五届省赛题C Colorful Cupcakes(五维数组+记忆化搜索)

    在写题目之前先来介绍一下记忆化搜索. 算法上依然是搜索的流程,但是搜索到的一些解用动态规划那种思想和模式保存.一般来说,动态规划总要遍历所有的状态,而搜索可以排除一些无效的状态.最最最最最主要的是,搜 ...

  8. 海贼王之伟大航路——状压记忆化搜索

    海贼王之伟大航路 题意: 一共 n 个点,给定任意两点的距离 dis[i,j]dis[i, j]dis[i,j]. 问,从点 1 到点 n,中途所有节点经过且仅经过一次,距离最短为多少? (2< ...

  9. 01迷宫(深搜寻找+记忆化搜索)

    01迷宫(深搜+记忆化搜索) 题目描述 有一个仅由数字0与1组成的n×n格迷宫.若你位于一格0上,那么你可以移动到相邻4格中的某一格1上,同样若你位于一格1上,那么你可以移动到相邻4格中的某一格0上. ...

最新文章

  1. 重磅!谷歌刚刚发布Objectron新数据集,可完美检测3D目标,超过4百万幅图像和15K视频剪辑!...
  2. MS SQLSERVER通用存储过程分页
  3. JS获取字符串实际长度!
  4. HDU 2191 - 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (多重背包)
  5. 分压式静态工作点稳定电路
  6. java继续_Java中消除实现继续和面向接口编程
  7. Kotlin学习笔记20 阶段复习2
  8. Apache Spark 2.2.0 中文文档 - Spark RDD(Resilient Distributed Datasets)
  9. MySQL 备份 nb3 和 psc的区别
  10. [译]为什么Vue不支持templateURL
  11. Ceph:一个新时代的开始
  12. Android程序暂停sh,init进程 解析Android启动脚本init.rc 修改它使不启动android init.rc中启动一个sh文件...
  13. Unity 制作RPG小地图
  14. JavaScript开发环境Aptana
  15. Canonical发布信息图:Ubuntu Linux连接一切
  16. cmake指定输出安装目录
  17. 《动手学深度学习》网页版
  18. angular $element.html 数据展示不出来,element-ui Table 组件循环列表数据不显示?
  19. Scratch制作飞翔的小喵小游戏
  20. python编程长方形面积公式_求长方形面积-题解(Java代码)

热门文章

  1. ESXi5.5主机如何重启NTP服务
  2. Dynamic-IPSec
  3. 经典回顾:Unix在计算机历史上的传奇
  4. Python程序退出时执行指定代码
  5. 2014工作一年的感悟与总结
  6. Day06-元组字典集合%冒泡排序、选择排序
  7. 如何选择神经网络模型,神经网络模型选择
  8. ​抗击新型冠状病毒,科技公司捐赠武汉排行榜名单
  9. 够劲!郭德刚最新相声竟然如此讽刺韩国
  10. 在论坛上看到一句话,感触很深