hdu 1078 FatMouse and Cheese

2023-11-04

Problem

acm.hdu.edu.cn/showproblem.php?pid=1078

题意

n * n 个洞,每个洞都放有 0 ~ 100 个芝士块。

老鼠从 (0,0)出发,每次都能横着或竖着走最多 k 格,且要走到芝士块数比当前洞多的洞里。

老鼠每次都吃完洞里的芝士块。问最多能吃多少块。

Analysis

位置(i,j)的洞,应该是从该洞的上、下、左、右四个方向 k 步之内的、芝士块比当前洞少的洞走过来的。所以到洞(i,j)能吃到的最多芝士块数:

dp[i][j] = cheese[i][j] + max { dp[i+dx][j] , dp[i][j+dy] | 0 <= i+dx , j+dy < n , -k <= dx , dy <= k }

可以用记忆化搜索写出这个 dp。但是这样在 dp[0~n-1][0~n-1] 找答案时,不知道哪些答案是从(0,0)出发得出的。

可以反过来想:从任意点出发,只能去芝士块数比当前洞小的洞,最后答案就是 dp[0][0]。

Source code

Accepted

#include <stdio.h>
#include <string.h>
#define N 100

int hole[N][N], dp[N][N], n, k;

int max(int a, int b)
{
	return a > b ? a : b;
}

int dfs(int r, int c)
{
	int i;
	if(dp[r][c] >= 0)
		return dp[r][c];
	dp[r][c] = 0; // 别忘了这句,因为下面的循环可能找不到合法的点,则最后 dp[r][c] = hole[r][c]
	for(i=1; i<=k; ++i)
	{
		if(r >= i && hole[r][c] < hole[r-i][c])
			dp[r][c] = max(dp[r][c], dfs(r-i, c));
		if(r+i < n && hole[r][c] < hole[r+i][c])
			dp[r][c] = max(dp[r][c], dfs(r+i, c));
		if(c >= i && hole[r][c] < hole[r][c-i])
			dp[r][c] = max(dp[r][c], dfs(r, c-i));
		if(c+i < n && hole[r][c] < hole[r][c+i])
			dp[r][c] = max(dp[r][c], dfs(r, c+i));
	}
	return dp[r][c] += hole[r][c];
}

int main()
{
	while(scanf("%d%d",&n,&k), ~n||~k)
	{
		int i, j;
		for(i=0; i<n; ++i)
			for(j=0; j<n; ++j)
				scanf("%d", hole[i]+j);
		memset(dp, -1, sizeof dp);
		printf("%d\n", dfs(0, 0));
	}
	return 0;
}

Wrong Answer第一种想法

#include <stdio.h>
#include <string.h>
#define N 100

int hole[N][N], dp[N][N], n, k;

int max(int a, int b)
{
	return a > b ? a : b;
}

int dfs(int r, int c)
{
	int i;
	if(dp[r][c] >= 0)
		return dp[r][c];
	for(i=1; i<=k; ++i)
	{
		if(r >= i && hole[r][c] > hole[r-i][c])
			dp[r][c] = max(dp[r][c], dfs(r-i, c) + hole[r][c]);
		if(r+i < n && hole[r][c] > hole[r+i][c])
			dp[r][c] = max(dp[r][c], dfs(r+i, c) + hole[r][c]);
		if(c >= i && hole[r][c] > hole[r][c-i])
			dp[r][c] = max(dp[r][c], dfs(r, c-i) + hole[r][c]);
		if(c+i < n && hole[r][c] > hole[r][c+i])
			dp[r][c] = max(dp[r][c], dfs(r, c+i) + hole[r][c]);
	}
	return dp[r][c];
}

int main()
{
	while(scanf("%d%d",&n,&k), ~n||~k)
	{
		int i, j, ans = 0;
		for(i=0; i<n; ++i)
			for(j=0; j<n; ++j)
				scanf("%d", hole[i]+j);
		memset(dp, -1, sizeof dp);
		dp[0][0] = hole[0][0];
		for(i=0; i<n; ++i)
			for(j=0; j<n; ++j)
				ans = max(ans, dfs(i, j));
		printf("%d\n", ans);
	}
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hdu 1078 FatMouse and Cheese 的相关文章

  • 使用 #pragma Once 和 #ifndef 时出现 VS 2010 C++ LNK2005 错误

    1 gt Deck obj error LNK2005 class Card card card 3VCard A already defined in Card obj 1 gt PokerTester obj error LNK2005
  • 采用 std::vector 或 std::array 的模板函数

    我有一个函数 当前接受 2 个向量 其中可以包含任何普通的旧数据 template
  • 在 WCF 上重用我的 PagedList 对象

    问题 我有一个自定义集合PagedList
  • 如何通过覆盖 MSBuild 目标来防止外语资源生成?

    我正在致力于减少大型 C ASP NET 解决方案的编译时间 我们的解决方案使用通常的 resx 文件方法翻译成大约十几种外语 这些资源文件的解析和编译极大地减慢了我们的编译时间 并且是日常的挫败感 我知道可以创建自定义资源提供程序并摆脱
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • 我可以将 char 或 DateTime 设置为 null 吗?

    我可以将 null 设置为char数据类型 并且DateTime在 C 中 多谢你们 这是不可能的 它是一个值类型 使用 char myChar null DateTime myDate null 这相当于 Nullable
  • 模板与非模板类,跨编译器的不同行为

    我在一些应用程序中使用编译时计数器 它确实很有用 昨天我想用 gcc 编译一个程序 我之前使用的是 msvc 并且计数器的行为在模板类中发生了变化 它在模板类中不再工作 过于简化的代码 Maximum value the counter c
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 查找方法不适用于 EF6.1 模拟

    我已经使用这些 msdn 指南设置了模拟 使用模拟框架进行测试 EF6 及以上 http msdn microsoft com en us data dn314429 var bsAc db BusAcnts FirstOrDefault
  • 如何禁用基于 ValidationRule 类的按钮?

    如何禁用基于 ValidationRule 类的 WPF 按钮 下面的代码可以很好地突出显示 TextBox
  • 在 C# .NET 中对非 ASCII 字符进行编码

    我想向我的应用程序发送的电子邮件添加自定义标头 标头名称只能包含 ASCII 字符 但对于值和用户可能会输入 UTF 8 字符 我必须对它们进行 Base64 编码 此外 我还必须将它们解码回 UTF 8 以便在 UI 中向用户显示它们 最
  • 意外的 const 引用行为

    include
  • 实体框架读取列但阻止其更新

    给定一个数据库表 其中有一列包含历史数据但不再填充 实体框架中是否有一种方法可以读取该列 但在使用相同的模型对象时防止它被更新 例如我有一个对象 public class MyObject public string CurrentData
  • Unity - 在生成时获取随机颜色

    我有一个小问题 我想在我的场景中生成四边形 它们都应该有红色或绿色作为材质 但 Random Range 函数只能是 int 我该如何解决它 void SpawningSquadsRnd rndColor 0 Color red rndCo
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d
  • C# PasswordDeriveBytes:似乎 Salt 并不重要

    可能我误解了什么 以下代码通过 CryptDeriveKey 使用两种不同的盐生成两个相等的密钥 这是控制台结果 盐1 21 3e 18 a3 9a 8b 5f gt 键 da 89 ea 3d 91 08 20 98 20 e9 dc 4
  • 检查一个数是否是完全平方数?

    我认为以下代码存在精度问题 bool isPerfectSquare long long n long long squareRootN long long sqrt n 0 5 return squareRootN squareRootN
  • Asp.Net Core 中的 SSL 不起作用

    我从 Visual Studio 创建了一个简单的 Web 应用程序Web Application Net Core 具有个人用户帐户授权的模板 然后 我启用了 SSLProject gt MyProject Properties 将带有
  • 在 C# 中使用自定义千位分隔符

    在显示字符串时 我尝试不使用 字符作为千位分隔符 而是使用空格 我想我需要定义一种自定义文化 但我似乎做得不对 有什么指点吗 例如 将 1000000 显示为 1 000 000 而不是 1 000 000 no String Replac
  • 创建进程默认浏览器

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 我想获取线程 id 因此 ShellExecute 无法获取线程 id 因此我开始使用

随机推荐

  • stduino IDE(国产)安装及使用感受!

    文章目录 一 了解stduino IDE 二 安装stduino 三 stduino完成STM32串口通信 四 总结与使用感受 五 参考 一 了解stduino IDE 大概是受到Ardunio IDE的启发 网上有一个国人版的MCU集成开
  • Sublime Text2中的快捷键一览表(Sublime 键盘快捷键大全 )

    Sublime Text 提供了无比强大的快捷键阵容 如果能够在Coding的时候灵活的使用快捷键 将能够使得你的效率倍增 相信在不久的将来 Sublime Text将是你跨平台使用的最佳Coding利器 Sublime Text 2默认使
  • matlab 求单/多元函数极值

    matlab 求单 多元函数极值 单元函数极值 平时如果手算的话 就会先求导数 再求驻点 最终代值算出极值 如果用matlab代码求的话 就可以减少很多不必要的计算 fun inline 0 5 x exp x 2 ezplot fun 0
  • 一个全新的数字化转型和新的营销方式已经来临!

    云翼港最新推出一套直播系统 一部直播手机 一套直播辅助软件 一个人只需一台直播手机 可以在不同的直播平台进行直播 一个人可以同时管理5 10个账号 甚至更多 轻松实现多平台的直播 这款直播辅助软件不仅可以使用数字人 也支持真人直播 还可以在
  • python从入门到入土

    一 基础语法 1 字变量 字变量 在代码中 被写下来的固定的值 字符串 python中用双引号包裹起来的都是字符串 本代码演示了 各类字变量的写法 通过print语句输出各类字变量 写一个整数字变量 666 写一个浮点数字变量 13 14
  • SQLite 数据库存取图片(QT方式)

    目录 实战演示 效果展示 SQLite 数据库可以存取图片 存取的格式为 BLOB 格式 需要把图片转为 QByteArray 格式进行存取 1 实战演示 以下实战代码 复制便可以直接运行 希望可以帮助到你 include
  • oracle报错:ORA-01839: date not valid for month specified(指定月份的日期无效)

    场景 日期值存的是10位字符串 如2020 02 01 sql筛选时需要选1年以内的 select from t user where to date app date yyyy MM dd gt sysdate 360 1 2 3 查看日
  • linux搭建geth私有节点

    linux创建节点 下载文件并上传服务器解压 Downloads Go Ethereum tar zxvf geth linux amd64 1 10 11 7231b3ef tar gz mv geth linux amd64 1 10
  • 2022年智能机器人与系统国际研讨会(ISoIRS 2022)

    2022年智能机器人与系统国际研讨会 ISoIRS 2022 重要信息 会议网址 www isoirs org 会议时间 2022年10月14 16日 召开地点 中国成都 截稿时间 2022年8月30日 录用通知 投稿后2周内 出版社 IO
  • C/C++时间戳转换函数

    目录 生成时间戳 time函数 函数原型 获取当前时间戳 转换时间戳为北京时间
  • 基于springboot+vue前后端分离的小区物业管理系统

    小区物业管理系统 简介 这是一个 SpringBoot Vue 的前后端分离小区物业管理系统 前端使用了若依的后台管理模板 使用 ElementUI 作为 UI 组件 使用 Vue Router 来进行路由跳转 使用 Vuex 来存储状态信
  • WPF自定义控件CustomControl中依赖属性、命令的使用

    Generic xaml中的UI代码
  • Redis中key的操作命令

    文章目录 Redis中key的操作命令 1 keys 查找所有符合模式pattern的key 2 exists 判断key是否存在于数据库中 3 move 移动指定的key到指定的数据库实例 4 ttl 查看key的剩余生存时间 5 exp
  • CoreML 的 C++部署 [2] 模型类抽象

    接上一篇 CoreML 的 C 部署 1 模型转换和预处理 再解决了预处理的问题后 部署部署还剩下模型类的抽象 主要包括初始化 推理以及获取输出 模型类的抽象 什么是模型类 可以参考 CoreML模型分析 我们是以MobileNetV2 m
  • 【Cinemachine】VirtualCamera虚拟相机详解(一)

    摘要 VirtualCamera虚拟相机是Cinemachine系统中的核心组成部分 咱们一起来看看虚拟相机是怎么用的吧 你好 我是跟着大智学Unity的萌新 我叫小新 这是我本周的学习总结报告哦 虚拟相机 Cinemachine中的Vir
  • 《数据仓库与数据挖掘》期末复习总结

    数据仓库与数据挖掘 期末复习总结 适用教材 数据挖掘概念与技术 第3版 Jiawei Han Mieheline Kamber Jian Pei著 机械工业出版社 提示 与教材内容不完全匹配 有所取舍 写在前面 这份复习总结是笔者根据老师授
  • 数据库期末复习(SQLserver)

    数据库期末复习 填空 1 数据库技术经历了 人工处理 文件系统 数据库系统 三个阶段 2 SQL语言集 数据定义 数据查询 数据 操纵 数据控制 功能于一体 3 E R图的主要元素是 实体型 属性 联系 4 关系系统的完整性控制包括 实体完
  • scrapy DNS lookup failed: no results for hostname lookup

    版权声明 更多最新原创文章请访问 最新原创主页 更多最全原创文章请访问 更多原创主页 DNS lookup failed 问题 第一天还可以正常跑起来的代码 第二天就跑不起来了 scrapy 中 解决方法
  • C语言第二节 分支结构

    1 BOOL数据类型 BOOL数据类型是一种表示非真即假的数据类型 只有 YES和 NO两种情况 YES 1 代表真 NO 0 代表假 BOOL数据类型的变量可以用来接收表达式的返回值 只要返回非0 那么BOOL类型的变量的值就为YES B
  • hdu 1078 FatMouse and Cheese

    Problem acm hdu edu cn showproblem php pid 1078 题意 n n 个洞 每个洞都放有 0 100 个芝士块 老鼠从 0 0 出发 每次都能横着或竖着走最多 k 格 且要走到芝士块数比当前洞多的洞里