小R的蛋糕分享

embedded/2025/1/8 3:03:41/

小R的蛋糕分享

问题描述
小R手里有一个大小为 n 行 m 列的矩形蛋糕,每个小正方形区域都有一个代表美味度的整数。小R打算切割出一个正方形的小蛋糕给自己,而剩下的部分将给小S。她希望两人吃的部分的美味度之和尽量接近。
我们定义小R吃到的部分的美味度之和为 s_1,而小S吃到的部分的美味度之和为 s_2,请你帮助小R找到一个切割方案,使得 |s_1 - s_2| 的值最小。

测试样例

样例1:
输入:n = 3, m = 3, a = [[1, 2, 3], [2, 3, 4], [3, 2, 1]]
输出:1

样例2:
输入:n = 4, m = 4, a = [[1, 2, 3, 4], [4, 3, 2, 1], [1, 2, 3, 4], [4, 3, 2, 1]]
输出:2

样例3:
输入:n = 2, m = 2, a = [[5, 5], [5, 5]]
输出:10

题解

核心思想,枚举每一个点作为正方形右下角的那个点。使用前缀和数组进行重复求和运算。

#include <iostream>
#include <vector>
#include <string>using namespace std;int solution(int n, int m, vector<vector<int>>& a) {// PLEASE DO NOT MODIFY THE FUNCTION SIGNATURE// write code hereint sum = 0;// 二维前缀和,记录0,0到i,j的美味度和//int num[n][m+1];vector<vector<int>> num(n + 1, vector<int>(m + 1, 0));for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {num[i + 1][j + 1] = a[i][j] + num[i][j+1] + num[i+1][j] - num[i][j];sum += a[i][j];}}int ans = INT32_MAX;int maxNum = min(n, m);for (int i = 1; i <= maxNum; i++) {for (int r = 0; r < n; r++) {for (int c = 0; c < m; c++) {if (c + 1 < i  || r + 1 < i) {continue;}int tmp = num[r+1][c+1] - num[r+1][c+1-i] - num[r+1-i][c+1] + num[r+1-i][c+1-i];ans = min(ans, abs(sum - 2 * tmp));}}}return ans;
}

http://www.ppmy.cn/embedded/152168.html

相关文章

数仓建模(二) 从关系型数据库到数据仓库的演变

从传统数据库出发&#xff0c;帮助读者更好理解数仓的核心价值和基本结构 目录 先问 1. 什么是关系型数据库&#xff1f; 2. 为什么需要数据仓库&#xff1f; 第一部分&#xff1a;关系型数据库的核心特点与局限性 1.1 什么是关系型数据库&#xff1f; 1.1.1 关系型数据…

被催更了,2025元旦源码继续免费送

“时间从来不会停下&#xff0c;它只会匆匆流逝。抓住每一刻&#xff0c;我们才不会辜负自己。” 联系作者免费领&#x1f496;源&#x1f496;码。 三联支持&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;亲爱的朋友们&#xff0c;感谢你…

C# 中 `new` 关键字的用法

在 C# 中&#xff0c;new 关键字用于修饰方法、属性、索引器或事件声明时&#xff0c;表示当前成员隐藏基类中同名的成员。它们之间的具体区别如下&#xff1a; 不加 new&#xff1a; 如果子类定义了一个与父类同名的方法&#xff0c;但没有使用 new 关键字&#xff0c;编译器会…

网络设备安全

21.1 概况 1&#xff09;交换机安全威胁 交换机是构成网络的基础设备&#xff0c;主要的功能是负责网络通信数据包的交换传输 MAC 地址泛洪&#xff08;flooding&#xff09;&#xff1a;通过伪造大量的虚假 MAC 地址发往交换机ARP&#xff08;地址解析协议&#xff08;Addr…

docker优雅停止容器

优雅停止容器 docker stop: 先请求容器进程停止&#xff0c;如果10秒后未停止&#xff0c;将会强制kill该进程。 docker stop命令试图向容器内的根进程&#xff08;PID1&#xff09;发送SIGTERM信号来停止正在运行中的容器。如果根进程在超时时间&#xff08;默认10s&#xff…

redis cluster 主节点挂了,如何保证消息不丢失

redis cluster 主节点挂了&#xff0c;从节点切换成主节点时&#xff0c;如何保证消息不丢失 在 Redis Cluster 中&#xff0c;主节点挂掉后&#xff0c;能够确保消息不丢失的关键在于以下几个机制&#xff1a; 1. Redis Cluster 的数据复制机制 Redis Cluster 使用了主从复…

Redis哨兵(sentinel)

是什么 吹哨人巡查监控后台master主机是否故障&#xff0c;如果故障了根据投票数自动将某一个从库转换为新主库&#xff0c;继续对外服务 哨兵的作用 1、监控redis运行状态&#xff0c;包括master和slave 2、当master down机&#xff0c;能自动将slave切换成新master 能干嘛…

Lua语言的数据库交互

Lua语言的数据库交互 引言 Lua是一种轻量级、高效、可扩展的脚本语言&#xff0c;广泛应用于游戏开发、嵌入式系统以及快速原型开发等领域。在现代软件开发中&#xff0c;数据的持久化和管理变得尤为重要&#xff0c;因此数据库交互成为开发者必不可少的技能之一。本文将深入…