博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDOJ 1078 记忆化搜索
阅读量:4216 次
发布时间:2019-05-26

本文共 1163 字,大约阅读时间需要 3 分钟。

题目链接:

肥老鼠从(0,0)出发,每次最多水平或垂直移动K步(连续向同一方向),且移动停下的位置的cheese必须大于之前的,否则就被猫吃掉,求老鼠最多吃多少奶酪。
刚接触dp尝试分析一下,方便自己理解

dp[x][y]表示在从x,y出发移动k步最多可以吃到的奶酪数量 dp[x][y] = max(dp[nx][ny]+map[x][y],dp[x][y]);
    dp[nx][ny] 对应 dfs(nx,ny)  dp[x][y]开始为map[x][y] 如果 之后的值大于 map[x][y]则其会被更新,所以为了更新,用临时res代替map[x][y]
#include
#include
#include
#define MAX 105using namespace std;int dp[MAX][MAX];int n,k;int map[MAX][MAX];int dir[4][2] = {
{-1,0},{0,1},{1,0},{0,-1}};int dfs(int x, int y) { if(dp[x][y] != -1) return dp[x][y]; int res = map[x][y];//dp[x][y]最少为map[x][y] 终点时候 就是此值 for(int i = 0; i < 4; ++i){ for(int j = 1; j <= k; ++j){ int nx = x + j*dir[i][0]; int ny = y + j*dir[i][1]; if(nx>=0 && nx
=0 &&ny
map[x][y]){ res = max(res,dfs(nx,ny)+map[x][y]);//就是状态转移方程的 搜索形式 } } } return dp[x][y] = res; }int main() { std::ios::sync_with_stdio(false);//加快读取速度 while(cin >> n >> k){ if(n == -1 && k == -1) break; memset(dp,-1,sizeof(dp)); memset(map,0,sizeof(map)); for(int i = 0; i < n; ++i){ for(int j = 0; j < n; ++j){ cin >> map[i][j]; } } int ans = dfs(0,0); cout << ans <

转载地址:http://mqimi.baihongyu.com/

你可能感兴趣的文章
基于预测的自动驾驶全球导航卫星系统欺骗攻击检测
查看>>
上海工业互联网协会安全专委会成立,加快提升工业互联网安全保障能力
查看>>
普陀区委副书记顾军、区政府副区长魏静带队调研上海控安
查看>>
上海市水务工控系统安全联合研究实验室正式启用
查看>>
基于数字孪生的水务系统安全试验床正式上线
查看>>
上海控安成功入选“2020年度上海市工业互联网平台和专业服务商推荐目录”
查看>>
多传感器融合定位是否足够安全?(一)
查看>>
多传感器融合定位是否足够安全?(二)
查看>>
上海申通地铁集团院士专家工作站与上海控安达成战略合作
查看>>
多传感器融合定位是否足够安全?(三)
查看>>
光靠欺骗检测是不够的:对抗多目标跟踪的攻击
查看>>
上海控安自主研发汽车信息安全风险评估工具平台,建标准化检测能力
查看>>
汽车智能化啥时候能实现? 先问问“汽车传感器”!
查看>>
利用车对车通信定位欺骗攻击车载GPS
查看>>
不做单元测试?小心得不偿失!嵌入式系统单元测试工具,自动生成测试用例
查看>>
一种实用的联网汽车无线攻击方法及车载安全协议
查看>>
光靠欺骗检测是不够的:对抗多目标跟踪的攻击
查看>>
基于微区块链的V2X地理动态入侵检测
查看>>
面向V2C场景的ADAS数字孪生模型构建方法
查看>>
Comma2k19数据集使用
查看>>