行列反转所形成的矩阵左上象限的最大和

2024-02-23

我正在研究一个 HackerRank 问题,该问题在反转行和列后找到 2N x 2N 矩阵的左上象限中元素的最大总和。例如,如果矩阵是

M = [
  112  42   83   119
  56   125  56   49
  15   78   101  43
  62   98   114  108
];

那么颠倒行和列可以形成的最大和是119 + 114 + 56 + 125 = 414得到矩阵后

M' = [
   119  114  42   112
   56   125  101  49
   15   78   56   43
   62   98   83   108
];

反转第 2 列和第 0 行。

我还没有找到一个简单的解决方案,但我提出了一些可能有用的事实:

  • It is not可以通过反转行和列来获得任何配置。因此,答案不能是简单地对所有元素进行排序并对顶部求和NxN其中。
  • 此外,不可能将任何 1 个元素移动到任何其他位置。例如,(N-1,N-1)处的元素唯一可能被移动的位置是(0,N-1),(N-1,0),(0,0)。
  • 从右上或左下象限到左上象限需要进行 1 次行反转,从右下象限到左上象限需要进行 2 次反转。
  • 不可能提出一个简单地查看左上象限中的每个元素并检查它是否可以被可移动到其位置的元素范围内的更大元素替换的解决方案(例如M[0,1]=42可以替换为M[0,2]=83 or M[3,2]=114 or M[3,1]=98)因为您还必须考虑在此过程中受到拖累的其他元素。

除了这些事实之外,我想不出任何可以帮助我构建简单解决方案的东西。我是否遗漏了任何明显的事实?昨晚我一直在思考这个问题,直到午夜才睡。 :)


让我们进一步观察一个元素(N - 1, N - 1)只能在(0, 0), (N - 1, 0) or (0, N - 1)位置。

  • 考虑一个(r, c)元素。可以观察到它只能处于以下四种位置之一:(r, c), (N - r - 1, c), (r, N - c - 1) or (N - 1 - r, N - 1 - c)

  • 我们可以证明,总是存在一系列操作,将位于上述矩形顶点的四个数字中最大的数字放置到左上象限,而不改变其余部分(为了证明这一点,我们可以只考虑所有案例并提供一个明确的构造来完成它。它很长但很简单,所以我不会在这里发布它)。

  • 这两个观察给出了以下解决方案:

    int sum = 0;
    for (int i = 0; i < n / 2; i++)
        for (int j = 0; j < n / 2; j++)
            sum += max(a[i][j], a[i][n - j - 1], a[n - i - 1][j], a[n - i - 1][n - j - 1]); 
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

行列反转所形成的矩阵左上象限的最大和 的相关文章

随机推荐

  • Maven 构建在 Jenkins 中中止

    我是詹金斯的新手 我成功地在 Jenkins 中克隆了 GIT hub 存储库 现在尝试在 Jenkins 中构建获取的 Maven 项目 我有 7 个从 GITHUB 获取的项目 它们相互依赖 即某些项目在其 POM 中为其他项目定义了依
  • 如何用标准 Java 实现 Android 消息处理程序模式?

    我正在编写一个通过蓝牙与 PC 通信的 Android 应用程序 在正常操作期间 它会从手机向 PC 快速连续发送短 8 字节数据包 通常频率 gt 100Hz 在每个设备上 运行一个单独的线程来执行写入和读取 代码如下所示 The Cla
  • 如何在Android中获取设备信息[重复]

    这个问题在这里已经有答案了 可能的重复 如何检测操作系统或设备类型等系统信息 https stackoverflow com questions 3213205 how to detect system information like o
  • @Profile 导致无法启动 EmbeddedWebApplicationContext

    我尝试使用 Profile 功能来分离生产 开发环境配置和 测试 配置 但是当我将 Profile 添加到我的配置类中时 我得到 Exception in thread main org springframework context Ap
  • 样式使 NavLink 在 React 中“不可点击”

    我正在尝试设计一个react router dom NavLink 导航栏 我已经采用了几种不同的方法 但在每种情况下 无论我选择什么方式 都会使 NavLink 不可点击 它将是一个样式精美的框 不会通过单击进行导航 我采取了以下几种方法
  • 从本地时区转换为 utc 时区

    我正在尝试创建一个函数 它接受一个时间对象并将其转换为 UTC 时间 下面的代码似乎关闭了一小时 当我中午通过转换器运行时 我返回 18 00 00 但是当我通过在线转换器运行相同的数据时 我得到 17 00 00 我在这里做错了什么 任何
  • 将项目从 .NET Framework 3.5 迁移到 4.0 后,在调试期间在 DllImport 例程上获取 InteropServices.SEHException

    我编写了一个与winspool 打印驱动程序交互的应用程序 几个月来它一直工作得很好 我需要将我的项目从 NET Framework 3 5 移动到 4 0 以包含同事程序集 但这样做 并且仅这样做 会导致我的 dll 导入方法调用之一在从
  • 在 Python 中实现 GObject 接口

    当使用 GTK3 的 Python 3 绑定时 是否可以实现gobject GInterface通过子类化接口 在我的具体情况下 我想写一个自定义Gtk TreeModel https lazka github io pgi docs Gt
  • 使用客户端处理(服务器 = F)在 Shiny 应用程序中进行 DT 编辑会引发 JSON 错误

    我有一个闪亮的服务器应用程序 用户可以在其中编辑数据表 然后一些反应性摘要统计信息会相应更新 我在一个相当慢的框架上托管这个应用程序 这就是为什么我想使用客户端处理进行 DT 渲染 即server F传递给DT renderDataTabl
  • 连续任务未按正确顺序执行

    一直尝试按顺序执行任务 但它们是以随机顺序执行的 在 ContinueWith 之后附加 Unwrap 没有帮助 从这些方法而不是 Task 返回 T 的 Task 并将其结果分配给调用者也不起作用 不确定我的方法的签名 它们是否应该包含
  • 使用 API 密钥通过 Android 上的 GRPC 验证 Google Cloud Speech

    我已经成功地通过 GRPC 使用流模式下的服务帐户让 Google Cloud Speech 适用于我的 Android 应用程序 但是 根据我所读到的内容 出于安全原因 我不应该部署包含这些凭据 当前作为 JSON 文件存储在资源中 的
  • 我可以将现有 NuGet 包上传到 Azure DevOps 工件源吗?

    我目前正在从 TFS 2012 迁移到 Azure DevOps 2019 均为本地部署 使用旧服务器 我会从我们的一些构建中手动创建 NuGet 包 并托管这些包 nupkg文件共享上的文件 在 Visual Studio 中配置为包源
  • “无法初始化类 com.ibm.icu.impl.JavaTimeZone”是什么意思?

    发生错误 有关更多详细信息 请参阅错误日志 无法初始化类 com ibm icu impl JavaTimeZone 看看 http bugs debian org cgi bin bugreport cgi bug 600288 http
  • 如何使用 rxjs 5 观察对象变化

    我想监视一个对象 这样所有订阅者都会收到它的任何更改 我看到已经是了之前问过 https stackoverflow com questions 32683488 rxjs observing object updates and chan
  • 在 update() 转换期间绑定事件

    是否可以在转换期间将事件绑定到选择 例如 假设这是您的更新 g3 selectAll circles data dataFiltered function d return d token transition delay circleDe
  • 如何将一串键/值对转换为 HashTable 或 Dictionary 或者?

    在 VB NET 中 如何将以下字符串转换为某种键 值类型 例如哈希表 字典等 Name Fred Birthday 19 June 1906 ID 12345 我想提取生日或 ID 而不必将字符串拆分为数组 编辑 我不想将字符串拆分为数组
  • 在片段 android 的 CursorLoader 中显示进度对话框

    美好的一天 正如标题所说 任何人都知道如何在从片段内的 CursorLoader 加载数据时实现进度对话框 找不到这方面的任何例子 任何有关如何操作的链接或指南将受到高度赞赏 谢谢 我认为 Michal 的解决方案非常适合通过以下方式显示不
  • MySQL STR_TO_DATE() 函数返回 null

    我想将日期格式转换为MMMM dd yyyy to yyyy MM dd 我尝试使用以下内容 SET dt to STR TO DATE dateTo d m Y 但返回一个NULL value 我如何将我的日期转换为yyyy MM ddM
  • WPF - 将位图转换为 ImageSource

    我需要转换一个System Drawing Bitmap into System Windows Media ImageSource类 以便将其绑定到 WizardPage 扩展 WPF 工具包 的 HeaderImage 控件中 位图被设
  • 行列反转所形成的矩阵左上象限的最大和

    我正在研究一个 HackerRank 问题 该问题在反转行和列后找到 2N x 2N 矩阵的左上象限中元素的最大总和 例如 如果矩阵是 M 112 42 83 119 56 125 56 49 15 78 101 43 62 98 114