题目描述

Problem Description
有个小老鼠在校园里收藏了一些它最爱吃的奶酪。
校园可以看成一个长度为n的正方形网格,每个网格可以标记为(p,q),其中,0 <= p , q < n. 每个网格都有一个洞,里面储存了k(0<=k<=100)块奶酪。

现在,小老鼠准备享用这些美味啦。

开始的时候,他在(0,0)这个位置,每到一个地方,它都会吃光这个地方的奶酪,然后沿着水平或者垂直的方向到达另外一个地方。麻烦的是,有个很凶的猫总是在它的洞口附近,所以他每次最多移动K个位置,否则就会被这只猫吃掉。更糟糕的是,每在一个地方吃过奶酪,小老鼠都会变胖,所以,为了获得足够下一次逃跑的能量,它每次只能去比当前位置的奶酪更多的格子。
现在已知n和k,以及在每个网格的洞中小老鼠储存的奶酪的数量,请计算小老鼠在无法移动之前,一共最多能吃到多少块奶酪。

Input
题目包含多组测试数据。

每组测试数据组成如下:
首先一行包含2个不超过100的正整数n和k;
接下来n行,每行包含n个数:
第一行n个数分别表示 (0,0) (0,1) … (0,n-1)这些位置储存的奶酪数量;
第二行n个数分别表示(1,0), (1,1), … (1,n-1)这些位置储存的奶酪数量;
以此类推。

输入数据以两个-1结束。

Output
请输出小老鼠最多 能够吃到的奶酪数量,每组数据输出一行。

输入样例

3 1
1 2 5
10 11 6
12 12 7
-1 -1

输出样例

37

题目分析

动态规划不太好从当前位置出发寻找最优解,所以我们可以采用记忆化DFS切题。记忆化DFS结合了DP与DFS的优点,只不过效率较DP慢。

#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 110;
int mape[N][N], ans[N][N]; //mape存储图,ans存储这个位置出发最多能吃到的奶酪数
int n, k;
int direction[4][2] = {1, 0, 0, 1, -1, 0, 0, -1}; //增量数组
bool judge(int x, int y) { //判断是否越界if(x < 0 || x >= n || y < 0 || y >= n) {return false;}return true;
}
int DFS(int x, int y) {int answer = 0; //当前最优解if(ans[x][y]) return ans[x][y]; //记忆化for(int i = 0; i < 4; i ++) {for(int j = 1; j <= k; j ++) {int newx = x + direction[i][0] * j;int newy = y + direction[i][1] * j;if(judge(newx, newy) && mape[newx][newy] > mape[x][y])answer = max(answer, DFS(newx, newy));}}ans[x][y] = answer + mape[x][y];return ans[x][y];
}
int main() {while(~scanf("%d%d", &n, &k) && n != -1 && k != -1) {memset(mape, 0, sizeof(mape));memset(ans, 0, sizeof(ans));for(int i = 0; i < n; i ++)for(int j = 0; j < n; j ++)scanf("%d", &mape[i][j]);cout << DFS(0, 0) << '\n';}return 0;
}

DFS问题——老鼠和奶酪相关推荐

  1. 【算法】Mice and Cheese 老鼠和奶酪 Greedy

    文章目录 Mice and Cheese 老鼠和奶酪 问题描述: 分析 代码 Tag Mice and Cheese 老鼠和奶酪 问题描述: 有两只老鼠和 n 块不同类型的奶酪,每块奶酪都只能被其中一 ...

  2. 【记忆化搜索】老鼠吃奶酪

    woc,这种DP用记忆化搜索就很好写啊,老师之前说要建图什么的让我一直望而生畏,实际上记忆化一下就好了啊啊啊啊啊啊 如果图中不存在环而是个DAG就可以用记忆化搜索写,否则就得手动建图跑最短路 4559 ...

  3. 基于遗传算法和粒子群算法的混合算法实现小老鼠找奶酪问题

    此为老师留的大作业 算法依据:http://wenku.baidu.com/view/4387f569af1ffc4ffe47acc7 算法实现 #ifndef CHEESE_H #define CH ...

  4. LeetCode 2611. 老鼠和奶酪:排序 + 贪心

    [LetMeFly]2611.老鼠和奶酪:排序 + 贪心 力扣题目链接:https://leetcode.cn/problems/mice-and-cheese/ 有两只老鼠和 n 块不同类型的奶酪, ...

  5. 【每日一题Day230】LC2611老鼠和奶酪 | 排序+贪心

    老鼠和奶酪[LC2611] 有两只老鼠和 n 块不同类型的奶酪,每块奶酪都只能被其中一只老鼠吃掉. 下标为 i 处的奶酪被吃掉的得分为: 如果第一只老鼠吃掉,则得分为 reward1[i] . 如果第 ...

  6. Leetcode.2611 老鼠和奶酪

    题目链接 Leetcode.2611 老鼠和奶酪 Rating : 1663 题目描述 有两只老鼠和 n 块不同类型的奶酪,每块奶酪都只能被其中一只老鼠吃掉. 下标为 i 处的奶酪被吃掉的得分为: 如 ...

  7. 2023-06-07 LeetCode每日一题(老鼠和奶酪)

    2023-06-07每日一题 一.题目编号 2611. 老鼠和奶酪 二.题目链接 点击跳转到题目位置 三.题目描述 有两只老鼠和 n 块不同类型的奶酪,每块奶酪都只能被其中一只老鼠吃掉. 下标为 i ...

  8. 力扣 2611. 老鼠和奶酪

    题目描述:2611. 老鼠和奶酪 有两只老鼠和n块不同类型的奶酪,每块奶酪都只能被其中一只老鼠吃掉. 下标为i处的奶酪被吃掉的得分为: 如果第一只老鼠吃掉,则得分为reward1[i].如果第二只老鼠 ...

  9. [LeetCode刷题] 2611. 老鼠和奶酪--Java实现

    ##  题目链接 2611. 老鼠和奶酪 - 力扣(LeetCode) ##  题目描述 有两只老鼠和 n 块不同类型的奶酪,每块奶酪都只能被其中一只老鼠吃掉. 下标为 i 处的奶酪被吃掉的得分为: ...

最新文章

  1. effective c++ 学习
  2. SAP WebIDE 里的 neo-app.json 文件用途
  3. 线程池ThreadPool,线程池底层ThreadPoolExecutor方法七大参数,拒绝策略,以及实际开发中高并发下用到哪个线程池?
  4. SVG 教程 (四)多边形,曲线,路径
  5. leetcode - 783. 二叉搜索树结点最小距离
  6. 解决Mac没有任何来源问题
  7. Unsafe in Java
  8. Linux抓包命令tcpdump
  9. 软件工程—需求分析阶段
  10. 《C陷阱与缺陷》学习笔记(1):这本书值得看吗?
  11. 关于MATLAB的saveas函数错误
  12. 图像处理/计算机视觉/python环境下如何用滤波器、算法恢复图片,对图片去污【附代码】
  13. Python+Selenium+Appium环境搭建
  14. XCTF-PWN pwn-200(使用DynELF利用write泄露system地址)
  15. 寒假还在纠结考研还是就业,听听研究生毕业的上班狗怎么说?
  16. 最全面的shiro知识点学习
  17. vue 省市区选择插件v-distpicker设置初值与选择后触发方法
  18. Spring事务的传播机制
  19. 光纤通信工程-波分复用DWDM(十一)
  20. 一文读懂机器学习,大数据/自然语言处理/算法全有了……

热门文章

  1. 计算机唤醒休眠快捷键,电脑休眠真的不耗电么?唤醒有快捷键么?
  2. 雷泰Endurance高温红外测温仪
  3. 过滤器的作用,如何实现一个过滤器
  4. rtl仿真器-incisive安装和测试
  5. 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU - 2191
  6. Mysql不能备份序列_无法mysqldump
  7. 领导周末让我们加班时应该怎么应对
  8. 【调剂】华中师范大学伍伦贡联合研究院2021年单学位项目接收第一轮申请通知...
  9. WSL2 Ubuntu 换源
  10. android NFC的读写