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 的相关文章

  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 重载<<的返回值

    include
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co

随机推荐

  • 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 格 且要走到芝士块数比当前洞多的洞里