【NOIP2014普及组复赛】题4:子矩阵

news2025/1/13 15:49:47

题3:子矩阵

【题目描述】

给出如下定义:

1.子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵。

例如,下面左图中选取第 2 、 4 2、4 24行和第 2 、 4 、 5 2、4、5 245列交叉位置的元素得到一个 2 ∗ 3 2*3 23 的子矩阵如右图所示。
在这里插入图片描述

2.相邻的元素:矩阵中的某个元素与其上下左右四个元素(如果存在的话)是相邻的。

3.矩阵的分值:矩阵中每一对相邻元素之差的绝对值之和。

本题任务:给定一个 n n n m m m列的正整数矩阵,请你从这个矩阵中选出一个 r r r c c c列的子矩阵,使得这个子矩阵的分值最小,并输出这个分值。

【输入】

第一行包含用空格隔开的四个整数 n , m , r , c n,m,r,c nmrc,意义如问题描述中所述,每两个整数之间用一个空格隔开。

接下来的 n n n行,每行包含 m m m个用空格隔开的整数,用来表示问题描述中那个 n n n m m m列的矩阵。

【输出】

输出共 1 1 1行,包含 1 1 1个整数,表示满足题目描述的子矩阵的最小分值。

【输入样例1】

5 5 2 3
9 3 3 3 9
9 4 8 7 4
1 7 4 6 6
6 8 5 6 9
7 4 5 6 1

【输出样例1】

6

【样例 1 说明】

该矩阵中分值最小的 2 2 2 3 3 3列的子矩阵由原矩阵的第 4 4 4行、第 5 5 5行与第 1 1 1列、第 3 3 3列、第 4 4 4列交叉位置的元素组成,为 675566 675566 675566
,其分值为 ∣ 6 − 5 ∣ + ∣ 5 − 6 ∣ + ∣ 7 − 5 ∣ + ∣ 5 − 6 ∣ + ∣ 6 − 7 ∣ + ∣ 5 − 5 ∣ + ∣ 6 − 6 ∣ = 6 |6-5|+|5-6|+|7-5|+|5-6|+|6-7|+|5-5|+|6-6|=6 ∣65∣+∣56∣+∣75∣+∣56∣+∣67∣+∣55∣+∣66∣=6

【输入样例2】

7 7 3 3
7 7 7 6 2 10 5
5 8 8 2 1 6 2
2 9 5 5 6 1 7
7 9 3 6 1 7 8
1 9 1 4 7 8 8
10 5 9 1 1 8 10
1 3 1 5 4 8 6

【输出样例2】

16

【样例 2 说明】

该矩阵中分值最小的 3 3 3 3 3 3列的子矩阵由原矩阵的第 4 4 4行、第 5 5 5行与第 2 2 2列、第 6 6 6列、第 7 7 7列交叉位置的元素组成,选取的分值最小子矩阵为 9957888810 9957888810 9957888810

【数据说明】

对于 50 % 50\% 50% 的数据, 1 ≤ n ≤ 12 , 1 ≤ m ≤ 12 1≤n≤12,1≤m≤12 1n12,1m12, 矩阵中的每个元素 1 ≤ a [ i ] [ j ] ≤ 20 1≤a[i][j]≤20 1a[i][j]20

对于 100 % 100\% 100% 的数据, 1 ≤ n ≤ 16 , 1 ≤ m ≤ 16 1≤n≤16,1≤m≤16 1n16,1m16,矩阵中的每个元素 1 ≤ a [ i ] [ j ] ≤ 1000 , 1 ≤ r ≤ n , 1 ≤ c ≤ m 1≤a[i][j]≤1000,1≤r≤n,1≤c≤m 1a[i][j]1000,1rn,1cm

【代码如下】:

#include <bits/stdc++.h>
using namespace std;
ifstream cin("submatrix.in");
ofstream cout("submatrix.ans");
const int N=30;
int a[N][N];
int n,m,r,c;
int f[N][N];
int w[N][N];
bitset<20>now;//偷懒用了bitset做状压。。。 
int calc(int x)//计算横着的 第x行 
{
    int last=0x3f3f3f3f,ret=0;
    for(int i=0;i<m;i++)
    if(now[i])
    {
        if(last!=0x3f3f3f3f)
        ret+=abs(a[x][i+1]-last);
        last=a[x][i+1];
    }
    return ret;
}
int work(int x,int y)//x是这一行 y是上一行 
{
    if(y==0)return 0;
    int ret=0;
    for(int i=0;i<m;i++)
    if(now[i])
    ret+=abs(a[x][i+1]-a[y][i+1]);
    return ret;
}
void init()
{
    for(int i=1;i<=n;i++)
    {
        int t1=calc(i);
        for(int j=i-1;j>=0;j--)
        w[i][j]=t1+work(i,j);
    }
}
void dp()
{
    int ans=0x3f3f3f3f;
    for(int s=0;s<(1<<m);s++)
    {    
        now=s;
        if(now.count()!=c)continue;
        memset(f,0x3f,sizeof f);
        f[0][0]=0;
        init();
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=r;j++)
            {
                for(int k=0;k<i;k++)
                f[i][j]=min(f[k][j-1]+w[i][k],f[i][j]);
            }
            ans=min(ans,f[i][r]);
        }
    }
    cout << ans << endl;
}
int main()
{
    cin >> n >> m >> r >> c;
    for(int i=1;i<=n;i++)
    	for(int j=1;j<=m;j++)
    	cin >> a[i][j];
    dp();
}

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

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

相关文章

结构安全预警?事前发现?人工观测VS自动化监测,谁更胜一筹?

人工检测是依靠目测检查或借助于便携式仪器测量得到的信息&#xff0c;但是随着整个行业的发展&#xff0c;传统的人工检测方法已经不能满足检测需求&#xff0c;从人工检测到自动化监测已是必然趋势。 a. 从检测方式看 人工检测需要耗费大量的精力&#xff0c;从摆放检测工具到…

web前端的路径和Servlet注解开发

目录 在web前端的两种路径 绝对路径的两种写法 相对路径 相对路径进阶 使用注解开发Servlet 使用注解开发Servlet的注意事项 使用idea创建servlet模板 在web前端的两种路径 绝对路径的两种写法 1.带网络三要素 http://ip地址:端口号/资源路径 2.不带网络三要素 /资源路…

Java开发大厂面试第17讲:MySQL 的优化方案有哪些?数据库设计、查询优化、索引优化、硬件和配置优化等

性能优化&#xff08;Optimize&#xff09;指的是在保证系统正确性的前提下&#xff0c;能够更快速响应请求的一种手段。而且有些性能问题&#xff0c;比如慢查询等&#xff0c;如果积累到一定的程度或者是遇到急速上升的并发请求之后&#xff0c;会导致严重的后果&#xff0c;…

Springboot开发 -- Postman 调试类型详解

引言 在 Spring Boot 应用开发过程中&#xff0c;接口测试是必不可少的一环。Postman 作为一款强大的 API 开发和测试工具&#xff0c;可以帮助开发者轻松构建、测试和管理 HTTP 请求。本文将为大家介绍如何在 Spring Boot 开发中使用 Postman 进行接口测试。 一、准备工作 安…

Three.js点与材质(Points)

球几何体 // 创建球几何体 const sphereGeometry new THREE.SphereGeometry(3, 20, 20) const material new THREE.MeshBasicMaterial({color: 0xff0000,wireframe: true // 以线框的形式显示顶点 }) const mesh new THREE.Mesh(sphereGeometry, material) scene.add(mesh)点…

淘宝订单系统ERP中如何接入平台订单信息?(订单API)

淘宝开放平台中有交易API&#xff0c;里面有各种关于交易的API接口。但是申报应用权限的审核流程严格又漫长。不少公司费时费力的申请后&#xff0c;结果还是没有审批下来。 调用淘宝自定义接口custom&#xff0c;可以实现淘宝开放平台API的调用。技术人员会根据您需要的接口做…

力扣第141题和142题-环形链表,是否有环,环的入口节点

因这2道题均不改变链表结构&#xff0c;所以可以不创建新的临时头结点 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ bool hasCycle(struct ListNode *head) {if(headNULL||head->nextNULL)//若只有一个数…

恶劣天候鲁棒三维目标检测论文整理

恶劣天候鲁棒三维目标检测论文整理 Sunshine to Rainstorm: Cross-Weather Knowledge Distillation for Robust 3D Object DetectionRobo3D: Towards Robust and Reliable 3D Perception against CorruptionsLossDistillNet: 3D Object Detection in Point Cloud Under Harsh W…

2024目前网上最火短剧机器人做法,自动搜索发剧 自动更新资源 自动分享资源

目前整个项目圈子很多的短剧机器人&#xff0c;我写的&#xff0c;自动搜索发剧&#xff0c;自动更新资源&#xff0c;自动分享资源&#xff0c;前段时间大部分做短剧的都是做的短剧分成&#xff0c;我的一个学员做的30W播放量才200块收益&#xff0c;备受启发&#xff0c;我就…

迷你手持小风扇到底哪个牌子最好?揭秘迷你手持手持小风扇排行榜

在炎炎夏日&#xff0c;迷你手持小风扇成为了我们不可或缺的清凉伴侣。然而&#xff0c;面对市场上琳琅满目的品牌&#xff0c;迷你手持小风扇到底哪个牌子最好&#xff1f;今天&#xff0c;我将揭秘迷你手持小风扇排行榜&#xff0c;带大家一探各大品牌的魅力&#xff0c;让你…

交叉编译程序,提示 incomplete type “struct sigaction“ is not allowed

问题描述 incomplete type "struct sigaction" is not allowed解决办法 在代码的最顶端添加如下代码即可 #define _XOPEN_SOURCE此定义不是简单的宏定义&#xff0c;是使程序符合系统环境的不可缺少的部分 _XOPEN_SOURCE为了实现XPG&#xff1a;The X/Open Porta…

Vitis HLS 学习笔记--抽象并行编程模型-控制驱动与数据驱动

目录 1. 简介 2. Takeaways 3. Data-driven Task-level Parallelism 3.1 simple_data_driven 示例 3.2 分析 hls::task 类 3.3 分析通道(Channel) 3.4 注意死锁 4. Control-driven Task-level Parallelism 4.1 理解控制驱动的 TLP 4.2 simple_control_driven 示例 4…

59 多次 mmap 虚拟地址的关系

前言 这是来自于网友的一篇帖子 然后 我们这里来探究一下这个问题 主要是 多次连续的 mmap 获取到的 虚拟地址区域 是否连续 以及 衍生出的一些其他的问题 从 mmap 的实现 我们可以知道, mmap 的空间是 自顶向下 分配的, 因此 两块空间应该是连续的, 第一块在上面, 第二块…

二百三十七、Hive——DWS层生成每个清洗字段的异常情况记录

一、目的 在Hive中对每种业务数据的清洗字段的异常数据进行记录 例如这张图&#xff0c;上面是原始数据&#xff0c;下面是每台雷达每天的异常字段的记录 二、实施步骤 &#xff08;一&#xff09;建表 create table if not exists dws_data_clean_record_queue(data_ty…

Go团队:Go是什么

2024年的Google I/O大会[1]如期而至。 这届大会的核心主旨毫无疑问是坚定不移的以AI为中心&#xff1a;Google先是发布了上下文长度将达到惊人的200万token的Gemini 1.5 Pro[2]&#xff0c;然后面对OpenAI GPT-4o的挑衅&#xff0c;谷歌在大会上直接甩出大杀器Project Astra[3]…

关于pytest中用例名称使用中文乱码的解决

场景&#xff1a;使用pytest.mark.parametrize装饰器为用例自定义名称时&#xff0c;运行显示乱码。如下图所示&#xff1a; 解决方案&#xff1a; 1.在根目录 pytest.ini中增加一行代码 [pytest] disable_test_id_escaping_and_forfeit_all_rights_to_community_supportTrue…

学习使用博客记录生活

学习使用博客记录生活 新的改变 今天新的开始&#xff0c;让我用图片开始记录吧 看这个背景图片怎么样

微信小程序实现容器图片流式布局功能,配合小程序原生框架使用。

小程序实现容器图片流式布局功能&#xff0c;因为目前论坛上也有很多博主出过类似的文章&#xff0c;这里我就以一个小白角度去讲一下如何实现的吧。给作者一点点鼓励&#xff0c;先点个赞赞吧&#x1f44d;&#xff0c;蟹蟹&#xff01;&#xff01; 目标 实现下方效果图 技术…

基金/证券项目如何进行非交易日数据补全(实战)

一些大数据开发的项目&#xff0c;特别是基金/证券公司的项目&#xff0c;都经常会涉及到交易日与非交易日的概念。 如果要让你对一张交易日跑批的主表&#xff0c;怎么去补全非交易日的数据呢&#xff1f; 在遇到这种情况的时候&#xff0c;我们要去怎么处理&#xff1f;来&…

模板编译之入口分析

Vue 是一个渐进式 JavaScript 框架&#xff0c;提供了简单易用的模板语法&#xff0c;帮助开发者以声明式的方式构建用户界面。Vue 的模板编译原理是其核心之一&#xff0c;它将模板字符串编译成渲染函数&#xff0c;并在运行时高效地更新 DOM。本文将深入探讨 Vue 模板编译的原…