前缀例题(一维二维)

news2024/9/22 21:29:08

​作者:小妮无语
专栏:暑假基础集训营

🚶‍♀️✌️道阻且长,不要放弃✌️🏃‍♀️

目录

一维前缀和

二维前缀和 

例题1:最大子矩阵

例题2: 激光炸弹

一维前缀和

本题唯一要注意的是数据范围!!! 

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,q;
long long a[N];
// long long f[N];
//观察数据范围1e9,最多1e5个数据如果做累加肯定是爆int(1e9),所以开longlong
int main()
{
    cin>>n>>q;
    
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        a[i]+=a[i-1];
        //由于a[i-1],在a[i],之前都已经被更新过了,
        //因为a[i],在以后也不会用到只是用来记录做累加用的,
        //直接在它上面累加一个道理,可以直接覆盖
        // f[i]=f[i-1]+a[i];
    }
    
    while(q--)
    {
        int l,r;
        cin>>l>>r;
        cout<<a[r]-a[l-1]<<endl;
    }
    return 0;
}


二维前缀和 

例题1:最大子矩阵

原题链接

Problem Description

给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。

Input

输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来这个矩阵,有m行,每行有n个不大于1000的正整数。

Output

对于每组数据,输出一个整数,表示子矩阵的最大和。

Sample Input

1 4 5 2 2 
3 361 649 676 588 
992 762 156 993 169 
662 34 638 89 543 
525 165 254 809 280

Sample Output

2474
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m,t,x,y;
int f[N][N];
int main()
{
    cin>>t>>n>>m>>x>>y;
    
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            cin>>f[i][j];
            f[i][j]+=f[i-1][j]+f[i][j-1]-f[i-1][j-1];
            //这个和一维前缀和原理一样上面解释过了
        }
    int cnt=-1;//求最大定义最小,求最小定义最大
    for(int i=x;i<=n;i++)
    {
        for(int j=y;j<=m;j++)
        {
            cnt=max(cnt,f[i][j]-f[i-x][j]-f[i][j-y]+f[i-x][j-y]);
            //这里为啥不是i-x-1?以为这是边界当i=3,r=2时你想要的是2-3区间内的元素的和,而正好i-r=1,减去的正好就是你区间前的呢个数
            //这i定义的x,其实就已经默认了下标是从1开始的了
        }
    }
    cout<<cnt;
    return 0;
}

例题2: 激光炸弹

题目

地图上有 N个目标,用整数 Xi,Yi表示目标在地图上的位置,每个目标都有一个价值 Wi。

注意:不同目标可能在同一位置。

现在有一种新型的激光炸弹,可以摧毁一个包含 R×R个位置的正方形内的所有目标。

激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个正方形的边必须和 x,y轴平行。

求一颗炸弹最多能炸掉地图上总价值为多少的目标。

输入格式

第一行输入正整数 N和 R,分别代表地图上的目标数目和正方形包含的横纵位置数量,数据用空格隔开。 

接下来 N行,每行输入一组数据,每组数据包括三个整数 Xi,Yi,Wi,分别代表目标的 x 坐标,y 坐标和价值,数据用空格隔开。

输出格式

输出一个正整数,代表一颗炸弹最多能炸掉地图上目标的总价值数目。

数据范围

0≤R≤10^9
0<N≤10000
0≤Xi,Yi≤5000
0≤Wi≤1000

输入样例:

2 1
0 0 1
1 1 1

输出样例:

1

本题难点

1.数据范围 

2.下标题目是从0开始给的,前缀和唯一点下标必须从1开始,所以开始要注意加1 

3.一点细节上的处理,思路和上一题一样

#include<bits/stdc++.h>
using namespace std;
const int N=5010;
int n,r;
int f[N][N];

int main()
{
    cin>>n>>r;

    while(n--)
    {
        int b,c,d;
        cin>>b>>c>>d;
        // scanf("%d%d%d",&b,&c,&d);
        
        // f[b++][c++]+=d;//这个地方写错了,太愚蠢了,b++,是先用b,用完再++,呢加的意义是啥
        f[b+1][c+1]+=d;//为了下标从1开始,所有的元素都往后移动,这里由于题目说可能会有重复出现,所以要进行累加
    }
    
    for(int i=1;i<=5001;i++)
    {
        for(int j=1;j<=5001;j++)
            f[i][j]=f[i-1][j]+f[i][j-1]-f[i-1][j-1]+f[i][j];
    }
    
    if(r>=5000) //如果r本身就大于咱们的地的大小呢么全炸便是最大的范围,直接特判输出
    {
        cout<<f[5001][5001];//要加一,因为所有都得是加一存的
        return 0;//在一个函数中只要遇到return呢么这个函数就结束,这结束的是main函数
    }
    int cnt=-1;
    for(int i=r;i<=5001;i++)
    {
        for(int j=r;j<=5001;j++)
        {
            cnt=max(cnt,f[i][j]-f[i-r][j]-f[i][j-r]+f[i-r][j-r]);//同上一题,一模一样
        }
    }
    cout<<cnt;
    return 0;
}

 第一周例题over!!!

          == 欢迎来到暑假基础集训营的小菜鸟频道,睡不着就看看吧!==

跟着小张刷题吧!

                        ==  跟着小张刷题吧!==

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

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

相关文章

爬虫工具-替换js文件ReRes插件/Gores插件

目录 一、ReRes插件二、Gores插件 一、ReRes插件 用途&#xff1a;爬虫逆向过程中一些文件需要替换时 ① 原始网站js文件有无限debugger&#xff0c;复制原始网站js文件&#xff0c;删掉无限debugger相关代码保存为新的js文件&#xff1b;用ReRes插件进行替换② 原始网站js文件…

Xcode 14打包flutter 的项目构建失败

升级xcode 后flutter项目构建失败 起因&#xff1a; 升级Xcode 到新的14.3.1版本 错误&#xff1a; showing recent issues command phasescriptexecution failed with a nonzero exit code 这个错误很多情况下都会出现&#xff0c;所以参考价值较低。 解决&#xff1a; …

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 企业员工招聘系统的设计与实现

一.项目介绍 招聘系统将为招聘者和求职者构建一个功能齐全、方便快捷的招聘平台&#xff0c;减少双方投入招聘活动的成本&#xff0c;为招聘求职双方带来便利&#xff0c; 系统将实现如下目标&#xff1a; 1.针对系统内的不同角色&#xff0c;系统能够赋予其不同的操作权限。 …

有了HTTP,为什么还要RPC?

很长时间以来都没有怎么好好搞清楚 RPC&#xff08;即 Remote Procedure Call&#xff0c;远程过程调用&#xff09;和 HTTP 调用的区别&#xff0c;不都是写一个服务然后在客户端调用么&#xff1f;这里请允许我迷之一笑~Naive&#xff01; 本文简单地介绍一下两种形式的 C/S…

粒子群算法PSO优化VMD,适应度函数为最小样本熵或最小包络熵(可自行选择,代码已集成好,很方便修改)包含MATLAB源代码

近期评论区有小伙伴私信需要粒子群优化算法PSO法化VMD的&#xff0c;所以打算再写一篇。 与上一篇灰狼算法优化VMD相似&#xff0c;这篇文章也是以最小样本熵或最小包络熵为适应度函数的&#xff0c;好的&#xff0c;废话不多说&#xff0c;大家不懂得可以看这篇文章。灰狼优化…

《TCP IP网络编程》

2023.6.28 正式开始学习网络编程。 每一章每一节的笔记都会记录在博客中以便复习。 第1章 1.1理解网络编程和套接字 网络编程又叫套接字编程。所谓网络编程&#xff0c;就是编写程序使两台连网的计算机相互交换数据。 为什么叫套接字编程&#xff1f; 我们平常将插头插入插座上…

QT中把QWidget提升为自定义控件后样式表无效的原因

按照QT帮助手册的描述&#xff0c;当我们继承QWidget写了自己的类以后&#xff0c;必须要覆盖重写painterEvent函数。否则自定义类的样式表就不能生效。 这一点要切记。当你想继承QWidget时&#xff0c;不如直接继承上图的CustomWidget或者QFrame。 换句话说&#xff0c;永远不…

NXP i.MX 8M Mini的视频开发案例分享 (下)

本文主要介绍i.MX 8M Mini的视频开发案例&#xff0c;包含基于GStreamer的视频采集、编解码、算法处理、显示以及存储案例&#xff0c;GigE工业相机测试说明&#xff0c;H.265视频硬件解码功能演示说明等。 注&#xff1a;本案例评估版采用的是创龙科技TLIMX8-EVM&#xff0c;…

真的好用吗?鲜有人提的 RabbitMQ-RPC模式

RabbitMQ系列文章 手把手教你&#xff0c;本地RabbitMQ服务搭建&#xff08;windows&#xff09; 消息队列选型——为什么选择RabbitMQ RabbitMQ灵活运用&#xff0c;怎么理解五种消息模型 RabbitMQ 能保证消息可靠性吗 推或拉&#xff1f; RabbitMQ 消费模式该如何选择 死信是…

2023年3季度广州/深圳DAMA-CDGA/CDGP数据治理认证招生

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

【C语言%的多种用法】

C语言%的多种用法 C语言中%号那些事儿1、%之取余运算符的使用2、%之作格式符使用2.1、C语言格式符 3、%之搭配 * 的使用4、%之搭配 # 的使用5、客套话 C语言中%号那些事儿 前言&#xff1a; 众所周知&#xff1a;%百分号&#xff0c;在九年义务教育中&#xff0c;表示分数的分…

图片识别文字怎么做?这几种方法轻松解决

在现代社会&#xff0c;图片已经成为人们日常生活和工作中不可或缺的一部分。但是&#xff0c;由于图片中往往包含了大量的文字信息&#xff0c;如果要手动输入这些文字&#xff0c;不仅费时费力&#xff0c;而且容易出错。因此&#xff0c;将图片中的文字进行识别已经成为我们…

应用打包部署k8s (包括dockerfile打包及仓库上传)

文章目录 一、docker run 运行测试1.数据库测试2.接口测试3.前端界面测试 二、编写dockerfile1.前端2.后端 三、推送镜像&#xff08;后面k8s就从这里获取镜像了&#xff09;四.编写 docker-compose.yml五.K8s部署1.yaml文件编写及部署houduan-deployment.yamlhouduan-service.…

【STM32】F103 时钟树

STM32F103是一款基于ARM Cortex-M3内核的32位微控制器&#xff0c;它具有丰富的外设资源和灵活的时钟配置。本文将从以下几个方面介绍STM32F103的时钟树&#xff1a; 时钟树的概念和作用时钟树的组成和分类时钟树的配置方法和步骤时钟树的应用实例 一、时钟树的概念和作用二、时…

如何通过Nacos获取当前服务注册的IP信息

一台机器可能存在多个网卡也就同时存在多个IP地址,如果我想知道我这个服务在向Nacos注册的时候使用的哪一个IP该怎么获取呢? 非常简单,你可以通过这种方式获取 import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import org.springframework.boot.CommandLineRunne…

Angular 调试 —— 一个真实的多重循环导致的Bug

导致性能问题的原因可能很复杂&#xff0c;也可能很简单&#xff0c;今天让我们来看一个现实的例子。一个多重循环导致列表卡死。 startDemo() {this.processing true// 创建复杂数据结构const data [];for (let i 0; i < 5000; i) {const innerArray [];for (let j …

【数据压缩】LZ77算法原理及实现

1. 引言 LZ77算法是采用字典做数据压缩的算法,由以色列的两位大神Jacob Ziv与Abraham Lempel在1977年发表的论文《A Universal Algorithm for Sequential Data Compression》中提出。 基于统计的数据压缩编码,比如Huffman编码,需要得到先验知识——信源的字符频率,然后进…

EasyExcel导出csv文件,用Office Excel打开乱码

1.前言 导出的列里有中文&#xff0c;导出后用Excel打开乱码 2.原因 搜索相关资料&#xff0c;csv和excel的编码不一致&#xff0c;需要在导出csv的时候设置编码GBK 3.验证

多级时间轮定时器

一. 多级时间轮实现框架 ​上图是5个时间轮级联的效果图。中间的大轮是工作轮&#xff0c;只有在它上的任务才会被执行&#xff1b;其他轮上的任务时间到后迁移到下一级轮上&#xff0c;他们最终都会迁移到工作轮上而被调度执行。 多级时间轮的原理也容易理解&#xff1a;就拿时…

实用工具|教你如何使用备份神器 Rclone,手把手保姆级教程

目录 什么是Rclone 功能 特性 支持的提供商 虚拟提供商 使用 安装 配置 语法 命令列表 常用参数 日志 过滤 环境变量 最佳实践 什么是Rclone Rclone是一个用于管理云存储上的文件的命令行程序。它是云供应商web存储接口的一个功能丰富的替代方案。超过40种云存储…