D. Maximum Sum of Products(二维数组记录改变区间)

news2025/2/5 2:45:46

Problem - 1519D - Codeforces

 

给你两个长度为n的整数数组a和b。

你最多可以扭转数组a的一个子数组(连续子段)。

你的任务是反转这样一个子数组,使其总和∑i=1nai⋅bi达到最大。

输入
第一行包含一个整数n(1≤n≤5000)。

第二行包含n个整数a1,a2,...,an(1≤ai≤107)。

第三行包含n个整数b1,b2,...,bn(1≤bi≤107)。

输出


例子
输入复制
5
2 3 2 1 3
1 3 2 4 2
输出拷贝
29
输入复制
2
13 37
2 4
输出拷贝
174
输入复制
6
1 8 7 6 3 6
5 9 6 8 8 6
输出拷贝
235
注意
在第一个例子中,你可以反转子数组[4,5]。然后a=[2,3,2,3,1],2⋅1+3⋅3+2⋅2+3⋅4+1⋅2=29。

在第二个例子中,你不需要使用反向运算。13⋅2+37⋅4=174.

在第三个例子中,你可以反转子数组[3,5]。那么a=[1,8,3,6,7,6],1⋅5+8⋅9+3⋅6+6⋅8+7⋅8+6⋅6=235。

题解:

贪心肯定是写不了这道题的,

我们如果暴力枚举所有可能区间的开头与结尾,然后再计算区间内交换的值也不行

肯定会t

那我们想想如何来优化这个过程,

首先前缀和是容易想到的,对于没有改变的区间可以快速求值

我们可以发现一些交换过的区间,可能会再次用到,

如果我们可以记录每次改变的区间,再次用到时就不用再次计算

因此我们用一个二维数组

f[l][r],代表记录的反转al~r后相乘后的值

每次dfs(i,j)我们要改变的区间,每次dfs的同时记录f[l][r]

#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<map>
#include<cstring>
#include<cmath>
#include<set>
using namespace std;
#define int long long
int a[200050];
int b[200050];
int p[200059];
int f[5005][5005];
int dfs(int l,int r)
{
	if(l == r)
	{
		return a[l]*b[r];
	}
	else if(l + 1 ==r)
	{
		return a[l]*b[r] + a[r]*b[l];
	}
	if(f[l][r] != 0)
	return f[l][r];
	return f[l][r] = a[l]*b[r] + a[r]*b[l] +dfs(l+1,r-1);
}
void solve()
{
	int n;
	cin >> n;
	for(int i = 1;i <= n;i++)
	{
		cin >> a[i];
	}
	for(int i = 1;i <= n;i++)
	{
		cin >> b[i];
	}
	for(int i = 1;i <= n;i++)
	{
		p[i] = p[i-1] + a[i]*b[i];
	}
	int ans = 0;
	for(int i = 1;i <= n;i++)
	{
		for(int j = i;j <= n;j++)
		{
			ans = max(ans,p[n] - p[j] + p[i-1] + dfs(i,j));
		}
	}
	cout << ans<<"\n";
	 
	
}
//1,0,1,1,0,1
//1 6
//3 2
//4 6
//5 3
//4 4
//5
signed main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);
//	cout.tie(0);
	int t = 1;
//	cin >> t;
    while(t--)
	{
		solve();
	} 
}

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

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

相关文章

第三十四章 linux-模块的加载过程四

第三十四章 linux-模块的加载过程四 文章目录第三十四章 linux-模块的加载过程四调用模块的初始化函数释放INT section所占用的空间呼叫模块通知链模块的卸载find_module检查依赖关系free_modulesys_init_module第二部分由load_module返回的do_init_module实现 static noinlin…

LCHub:到2023年,全球低代码市场预计达到269亿美元

12月13日,Gartner发布全球低代码市场规模报告。数据显示,到2023年,全球低代码市场规模预计达到269亿美元,同比增长19.6%。 业务技术专家认为,到2026年,超级自动化和业务可组合性将成为加速低代码技术应用的关键驱动力。 Gartner还发布了一项调查数据,到2023年全球超级自…

计算机毕设Python+Vue学习类视频网站(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

C++ STL 之堆栈(后进先出) stack 详解

文章目录Part.I AttentionPart.II FuncitonPart.III CodePart.I Attention stack<T>容器适配器的数据是以 LIFO (Last in First Out, 后进先出) 的方式组织的&#xff0c;可以将它想象成放在餐桌上的一摞盘子。必须要包含头文件#include <stack> Part.II Funcito…

2023年天津农学院专升本专业课考试具体安排及准考证打印时间

天津农学院2023年高职升本科专业课考试相关事宜的通知 一、考试时间及考试地点 1.考试时间&#xff1a;2022年12月31日9:00-11:00 2.考试地点&#xff1a;天津农学院东、西校区&#xff0c;每位考生具体的考试地点、考场号等信息以准考证上标注的为准。 天津农学院东校…

人工智能时代,你应该花4个月时间去学习编程,并找到一份好工作

把现在作为你冒险的开始&#xff0c;你会学到一种由高需求的技能&#xff0c;你会有一段新的经历&#xff0c;你会得到新的机会。试一试吧。 编者按&#xff1a;新的一年&#xff0c;很多人都会想要有一个新的开始。在Andrei Neagoie看来&#xff0c;人们应该选择一个非常有前…

maven—分模块开发与设计

项目与模块下载 任务&#xff1a; 将springmvc_ssm这个ssm整合后的项目拆分成四个模块&#xff0c;如下图&#xff1a; ssm_pojo拆分 新建模块 从原始项目中拷贝实体类&#xff08;User&#xff09;到该模块 ssm_dao拆分 新建模块 从原始项目中拷贝相关内容到该模块 数据…

DEJA_VU3D - Cesium功能集 之 089-台风范围几何绘制

前言 编写这个专栏主要目的是对工作之中基于Cesium实现过的功能进行整合,有自己琢磨实现的,也有参考其他大神后整理实现的,初步算了算现在有差不多实现小130个左右的功能,后续也会不断的追加,所以暂时打算一周2-3更的样子来更新本专栏(尽可能把代码简洁一些)。博文内容…

学习IB带给了我什么?

在某些层面&#xff0c;IB课程类似于大家更加熟知的AP课程——它是一种让高中学生学习高级、严格课程的体系。然而&#xff0c;有两个主要区别。首先&#xff0c;IB项目在美国高中或者美国大学申请中的受欢迎程度远远低于AP课程&#xff08;个人感觉是这样子滴哈&#xff09;&a…

【复习笔记】嵌入式系统及其原理复习重点

嵌入式系统及其原理复习重点笔记 计算机的发展 第一代——电子管计算机&#xff08;1946—1954年&#xff09; 内 存 延迟线或磁芯外 存 纸带、卡片或磁带工作速度 几千&#xff5e;一万次&#xff0f;秒软 件 机器语言或汇编语言应 用 科学计算代表机型 ENIAC特 点 体积庞大…

【vue】简易封装echarts

将echarts封装成组件&#xff0c;达到只要调用方法&#xff0c;传入数据和相应的参数就能生成图表的效果&#xff0c;避免在项目中编写大量重复和累赘的echarts的配置代码&#xff0c;实现的思路如下&#xff1a; 接口返回的一般是json数据&#xff0c;所以首先要将json数据进…

【LVGL学习笔记】(四)PlatformIO + LVGL8.3配置

LVGL全程LittleVGL&#xff0c;是一个轻量化的&#xff0c;开源的&#xff0c;用于嵌入式GUI设计的图形库。并且配合LVGL模拟器&#xff0c;可以在电脑对界面进行编辑显示&#xff0c;测试通过后再移植进嵌入式设备中&#xff0c;实现高效的项目开发。 LVGL中文教程手册&#…

PicGo+GitHub搭建个人图床用于Markdown、HTML等图片引用

方便程度&#xff1a;★★★★☆ 配置难度&#xff1a;★★☆☆☆ 稳定性&#xff1a;★★★★★ 适用环境&#xff1a;Windows、Mac、Linux 需要工具&#xff1a;GitHub 账号、PicGo 客户端 隐私性&#xff1a;别人可以访问你的图片仓库 GitHub仓库设置 流程&#xff1…

vue后台系统管理项目-商城轮播图管理功能

商城轮播图管理功能 功能介绍&#xff1a; 1.轮播图列表分页功能&#xff1b; 2.轮播图添加功能&#xff1b; 3.轮播图编辑功能&#xff1b; 4.轮播图删除功能&#xff1b; 5.轮播图启用禁用功能&#xff1b; 6.轮播图获取排序号功能&#xff1b; 7.轮播图查看详情功能&#xf…

2.创建自己的Cesiunm地球隐藏控件

目录​​​​​​​ 一、创建地球 引入Cesium.JS和初始页面 修改初始页面 将项目通过tomcat发布 二、去除不需要的控件 一、创建地球 引入Cesium.JS和初始页面 创建一个名为my-cesium的文件夹&#xff0c;将下载好的Cesium中的Build文件夹和Apps中的HelloWorld.html复制到…

基于Android的地铁查询系统app-计算机毕业设计

项目介绍 本软件研究了一个Android平台的地铁查询软件实现方案,从数据库数据保存到地铁数据的提取&#xff0c;再到界面的友好展示,最后到一个成型软件的生成这样一个过程,研究了SQLite数据库在Android平台的应用以及在手机平台的展示等等。 系统提供了地铁线路、站点和换乘的…

3.Entity和CZML添加图形

目录 Entity创建盒子 创建view容器 配置Entity ​编辑CZML数据添加图形 CZML是什么 怎么加载CZML Entity创建盒子 创建view容器 <!DOCTYPE html> <html lang"en"><head><!-- Use correct character set. --><meta charset"ut…

精华推荐 |【深入浅出Sentinel原理及实战】「原理探索专题」完整剖析Alibaba微服务架构体系之轻量级高可用流量控制组件Sentinel(1)

Sentinel是什么&#xff1f;不要概念混淆啊&#xff01; 注意&#xff1a;本Sentinel与Redis服务Sentinel是两回事&#xff0c;压根不是一个概念&#xff0c;请大家不要混肴。 Alibaba的Sentinel Sentinel是由阿里巴巴中间件团队开发的开源项目&#xff0c;是一种面向分布式微…

Vuex的相关知识

「Vuex的相关知识」 ​ vuex是一种对vue 应用中多个组件的共享状态进行集中式的管理(读/写)&#xff1b; vuex的工作原理&#xff1a; https://segmentfault.com/a/1190000021717329 ​ vuex 核心概念和API&#xff1a;state、mutations、actions、getters、modules、向外暴…

green power 设备入网过程

目录 Green Power设备入网流程 单项green power commissioning过程 抓包实例 1. SINK发送Green Power:GP Proxy Commissioning Mode命令​编辑​编辑 2. GPD发送入网命令 3. Proxy和Sink发送Green Power:GP Commissioning Notification 4. …