补题( Convolution, 二维卷积求输出矩阵元素和最大值)

 来源:https://codeforces.com/gym/105231/problem/H

题目描述:

一、题目分析
 
本题涉及深度学习中的二维卷积操作。给定一个n×m的二维输入矩阵I和一个k×l的核矩阵K ,通过特定公式计算得到(n - k + 1)×(m - l + 1)的输出矩阵O ,要求在核矩阵K元素只能为 - 1、0、1 的条件下,找出输出矩阵O所有元素之和的最大值。
 
二、解题思路
 
前缀和优化
 
首先对输入矩阵I计算二维前缀和。对于矩阵I ,设b[i][j]表示从(1, 1)到(i, j)的子矩阵元素之和。计算方式为b[i][j]=b[i][j - 1]+b[i - 1][j]-b[i - 1][j - 1]+a[i][j] 。这样做的好处是可以在O(1)时间内获取任意子矩阵的元素和。
 
计算卷积结果
 
对于输出矩阵O中的每个元素O(p,q) ,根据公式 ,由于K元素为 - 1、0、1 ,我们可以遍历所有可能的核矩阵组合(实际不需要真的枚举矩阵,而是通过分析元素贡献 )。
 
利用前缀和计算子矩阵和,例如对于核矩阵覆盖的子矩阵,通过前缀和相减的方式得到对应子矩阵元素和。如代码中t = b[i][j] - b[i - t1][j] - b[i][j - t2] + b[i - t1][j - t2] ,这里t1 = k ,t2 = l 。
 
求最大值
 
遍历所有可能的核矩阵取值情况(本质是考虑每个位置对结果的正负贡献 ),计算出不同情况下输出矩阵O元素之和,取其中的最大值。
 
三、代码实现(C++)

 #include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e3 + 10;
int a[N][N], b[N][N];
signed main() {ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n, m, k, l;cin >> n >> m >> k >> l;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> a[i][j];b[i][j] = b[i][j - 1] + b[i - 1][j] - b[i - 1][j - 1] + a[i][j];}}int sum = 0;int t1 = n - k + 1, t2 = m - l + 1;for (int i = t1; i <= n; i++) {for (int j = t2; j <= m; j++) {int t = b[i][j] - b[i - t1][j] - b[i][j - t2] + b[i - t1][j - t2];sum += abs(t);}}cout << sum;return 0;
}

四、复杂度分析
 
时间复杂度:计算前缀和部分是两层嵌套循环,时间复杂度为O(n×m) ;后续计算输出矩阵元素和部分也是两层嵌套循环,时间复杂度为O((n - k + 1)×(m - l + 1)) ,总体时间复杂度为O(n×m) ,在题目给定的数据规模下可以接受。
 
空间复杂度:使用了两个二维数组a和b存储矩阵数据和前缀和,空间复杂度为O(n×m) 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java ee初阶】多线程(7)

一、线程池 线程池的一些参数&#xff1a; corePoolSize&#xff1a;核心线程数量 maximumPoolSize:核心线程数量临时线程数量 上述是“java 的线程池策略”&#xff08;其他语言&#xff0c;其他库的线程池可能不同&#xff09; keepAliveTime :临时线程的存活时间.临时线程…

Linux 常用指令详解

Linux 操作系统中有大量强大的命令行工具&#xff0c;下面我将分类介绍一些最常用的指令及其用法。 ## 文件与目录操作 ### 1. ls - 列出目录内容 ls [选项] [目录名] 常用选项&#xff1a; - -l&#xff1a;长格式显示&#xff08;详细信息&#xff09; - -a&#xff1a;显…

uv安装及使用

windows安装参考&#xff1a; 什么是python uv&#xff0c;如何在windows上安装uv&#xff0c;基础的用法有哪些&#xff1f;_windows安装uv-CSDN博客 https://zhuanlan.zhihu.com/p/6776864377 使用方式 方式1&#xff1a; 创建uv虚拟环境->激活环境->安装依赖&…

C#实现Socket通信:基于TCP/IP协议的网络编程

TCP/IP网络模型 最上层的是应用层&#xff0c;也就是我们日常可以接触到的&#xff0c;它会给数据添加对应的头部&#xff0c;并传输给传输层&#xff0c;应用层是我们日常会接触到的&#xff0c;比如HTTP&#xff0c;FTP&#xff0c;Telnet&#xff0c;DNS&#xff0c;SMTP。…

哈希算法、搜索算法与二分查找算法在 C# 中的实现与应用

在计算机科学中&#xff0c;哈希算法、搜索算法和二分查找算法是三个非常基础且常用的概念。它们分别在数据存储、数据查找、以及高效检索等场景中起着至关重要的作用。在 C# 中&#xff0c;这些算法的实现和使用也十分简便。本文将详细讲解这三种算法的原理、应用以及 C# 中的…

AI日报 · 2025年5月05日|雅诗兰黛与微软合作成立 AI 创新实验室,加速美妆产品研发与营销

1、苹果与 Anthropic 深化合作&#xff0c;内部测试 AI 驱动的新版 Xcode 据多方报道&#xff0c;苹果公司正与人工智能初创公司 Anthropic 合作&#xff0c;开发集成 AI 功能的新一代 Xcode 开发平台。该平台旨在利用 Anthropic 强大的 Claude Sonnet 模型&#xff0c;为开发…

python celery框架结合django的使用

学习目标&#xff1a; 通过文章了解celery的运行机制以及如何结合django去使用 熟悉celery的运行原理属性celery在django项目当中的配置如何启动运行celery框架 学习内容&#xff1a; 熟悉celery的运行原理&#xff0c;简单来说 Celery 是一个“任务排队机后台处理器”。帮你…

滑动窗口leetcode 904

代码&#xff1a; class Solution { public:int totalFruit(vector<int>& fruits) {int n fruits.size();unordered_map<int,int> window_type_count;int left 0;int ans 0;for(int right 0; right <n;right){while(window_type_count.size() 2 &&…

用可视化学习逆置法

1.逆置法思路 目标&#xff1a;将这个彩色数组向右旋转3步 &#x1f534;1 → &#x1f7e0;2 → &#x1f7e1;3 → &#x1f7e2;4 → &#x1f535;5 → &#x1f7e3;6 → ⚪7我们希望得到 &#x1f535;5 → &#x1f7e3;6 → ⚪7 → &#x1f534;1 → &#x1f7e0;…

Cisco Packet Tracer 选项卡的使用

目录 设备Config选项卡的使用 Realtime and Simulation模式&#xff08;数据包跟踪与分析&#xff09; 设备Desktop选项卡的使用 设备Config选项卡的使用 Hostname NVRAM Startup Config----Load 加载 INTERFACE 点击on Save 如果&#xff0c;不把Running Config保存为Sta…

pyqt写一个单片机配置界面

已经实现以下功能 1.可以选择单片机架构 2.选择完单片机架构后第二个框可以选择常见单片机型号 3.选择完常见单片机型号后第三个框可以选择内部资源如adc等&#xff08;可以选择多个内部资源&#xff09;4.选择完内部资源如adc等&#xff08;可以选择多个内部资源&#xff09;后…

丢失的数字 --- 位运算

目录 一&#xff1a;题目 二&#xff1a;算法原理 三&#xff1a;代码实现 一&#xff1a;题目 题目链接&#xff1a; 268. 丢失的数字 - 力扣&#xff08;LeetCode&#xff09; 二&#xff1a;算法原理 三&#xff1a;代码实现 class Solution { public:int missingNumb…

千锋教育Ansible自动化运维实战教程从入门到精通

简介 介绍 Ansible 的基本概念、自动化运维优势、应用场景及课程目标。 欢迎开启 Ansible 学习之旅&#xff01; 你好&#xff01;作为一名学习者&#xff0c;你即将通过这个 Ansible 自动化运维实战 课程&#xff0c;从零开始掌握自动化运维的超能力&#xff01;这个“简介”…

深入理解 TensorFlow 的模型保存与加载机制(SavedModel vs H5)

深入理解 TensorFlow 的模型保存与加载机制&#xff08;SavedModel vs H5&#xff09; 在使用 TensorFlow 进行模型训练后&#xff0c;模型的保存与加载是部署、复用和迁移学习的重要环节。TensorFlow 提供了两种主要的保存格式&#xff1a;SavedModel 和 HDF5 (.h5)。本篇文章…

C++之特殊类设计及类型转换

目录 一、设计一个不能被拷贝的类 二、设计一个只能在堆上创建对象的类 三、设计一个只能在栈上创建对象的类 四、设计一个不能被继承的类 五、设计一个只能创建一个对象的类(单例模式) 六、C语言中的类型转换 七、C中的三类类型转换 八、C强制类型转换 8.1、为什么C需…

制作一款打飞机游戏36:调度编辑器

我们正在创建一个调度编辑器。嗯&#xff0c;这个名字听起来可能有点奇怪&#xff0c;对吧&#xff1f;但如果你了解射击游戏中的“调度”&#xff0c;那就是敌人出现的时间表。 你可能已经看到了&#xff0c;我们有一个可以滚动的关卡。现在&#xff0c;我想增加一些交互性&a…

wordperss AI插件:AI图文+视频+长尾关键词自动生成,已内置deepseek、kimi全模型,支持简单一键接入更多自定义API

【2.17最新版】Linkreate wordperss AI插件&#xff1a;AI图文视频长尾关键词自动生成&#xff0c;已内置deepseek、kimi全模型。 支持自定义接入其它API&#xff0c;包括但不限于腾讯云API和它的deepseek模型 后台只需要设置对应的API url 、模型 、API key,就可以让插件调用…

从零开始学Python:开启编程新世界的大门

在当今数字化时代&#xff0c;Python作为一门简洁、高效且功能强大的编程语言&#xff0c;受到了越来越多人的喜爱与追捧。无论是数据科学、人工智能、Web开发&#xff0c;还是自动化脚本编写&#xff0c;Python都展现出了卓越的能力。本文将带领大家踏上Python学习之旅&#x…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.2 缺失值检测与处理(NULL值填充/删除策略)

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 缺失值检测与处理全攻略&#xff1a;NULL值填充与删除策略实战3.2 缺失值检测与处理3.2.1 缺失值类型与业务影响3.2.1.1 缺失值的三种形态3.2.1.2 业务影响分级 3.2.2 缺失值…

Java求职面试:Spring Boot与微服务的幽默探讨

Java求职者面试&#xff1a;技术与幽默的碰撞 场景概述 在某互联网大厂的面试现场&#xff0c;面试官严肃认真&#xff0c;程序员则是一个搞笑的水货角色。面试者名叫张伟&#xff0c;年龄28岁&#xff0c;硕士学历&#xff0c;拥有5年的Java开发经验。以下是面试的详细过程。…