当前位置: 首页 > news >正文

[BCSP-X2024.小高3] 学习计划

题目描述

暑假共有 n 天,第 i 天的精力指数为 a[i],你想要利用假期依次(按 1,2,...,m 顺序)复习 m 门功课,第 i 门功课的重要程度为 b[i],且每门的复习时段必须连
续,并且不能有某天不干事。

假设第 i 门功课的复习时段为第 l∼r 天,那么第 i 门功课的收益为 b[i]×(a[l]+a[l+1]+...+a[r]),你的总收益为 m 门功课收益的总和。

请你制订一个复习计划,使得总收益最大。

形式化地,给定序列 a[1∼n],b[1∼m],你需要把 1,2,...,n 这个序列分成首尾相
连且非空的 m 段,假设每段的 a 之和为 s[1∼m],最大化 ∑i+1m​b[i]×s[i] 的值。

例如 a=[−3,6,−1,−8,7,−6],b=[−3,2],最优策略是第 1∼4 天复习第 1 门功课,收益为 −3×(−3+6−1−8)=18;第 5∼6 天复习第 2 门功课,收益为 2×(7−6)=2;总收益为 18+2=20。

例如 a=[6,3,5,10,5],b=[−8,−5,−5],最优策略是分成 [1],[2,3,4],[5] 三段,总收益为 −8×6−5×(3+5+10)−5×5=−163。

输入格式

第一行为 1 个整数 T,代表有 T 组数据。

每组数据第一行 2 个整数 n,m,第二行 n 个整数 a[1∼n],第三行 m 个整数 b[1∼m]。

输出格式

输出 T 行,每行 1 个整数代表答案。

样例 #1

样例输入 #1

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

样例输出 #1

20
144
-34
-12
-163

提示

对于所有数据,满足 1≤T≤20,1≤m≤n≤2000,−10^3≤a[i],b[i]≤10^3 。

对于测试点 1∼7:n≤10

对于测试点 8∼12:n≤500

对于测试点 13∼16:所有 a[i],b[i] 均为正整数

对于测试点 17∼20:n≤2000

#include <bits/stdc++.h>
using namespace std;int a[2010],b[2010];//-1e3~1e3 -1e3~1e3
int dp[2010];//-2e9~2e9
int main()
{int t;//1~2e1cin>>t;while(t--){memset(dp,0x80,sizeof(dp));int n,m;//1~2e3cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=m;i++)cin>>b[i];dp[1]=a[1]*b[1];for(int i=2;i<=n;i++)for(int j=m;j>=1;j--)dp[j]=a[i]*b[j]+max(dp[j-1],dp[j]);cout<<dp[m]<<endl;}return 0;
}

背景

        这道题是我考BCSP-X的T3,当时直接爆零……

主题思路

        首先,最重要的一点——你得意识到这是个DP。在这之后,要思考几件事。

                1.不出意外的话,这是个二维dp,毕竟是T3。

                2.直觉告诉我们,dp[i][j]里存的是到i为止的最大收益。那第一、二维代表什么?可以找题目中的时间,状态,以及其他变量。有时间(天),那第一维就是天。很显然,第二维最合适的的是科目,因为它与时间没有什么关联,而且是决定答案的关键因素之一。

                3.dp[i][j]是由什么推导而来的?即第1~i天如果选择第j门功课,最大收益与什么有关联?走到这一步时,首先要加上今天本身的收益——a[i]*b[j],紧接着要加第1~i-1天的最大收益,这时你有两个选择(要选最大值)。如果你仍延续了昨天的选择,如继续学习语文,那么要加上dp[i-1][j],时间变为昨天,科目不变;如果你换了一科,如改为学习数学,那么要加上dp[i-1][j-1],时间变为昨天,科目变为上一个科目。注意,题目中说“你想要利用假期依次(按 1,2,...,m 顺序)复习 m 门功课”,那么你就只能是紧挨着你的上一个功课变来的。

         接下来就没什么了,由3.我们可以得到最最最重要的状态转移方程式:dp[i][j]=a[i]*b[j]+max(dp[i-1][j-1],dp[i-1][j]);,就……做完了。

细节重点

        1.由于是多组数据,肯定少不了memset。a、b数组会覆盖不用管,但是dp要给赋值成极小值。这是因为在max(dp[j-1],dp[j])处可能会取到尚未赋值的dp区域,如果赋值的部分是负数,理论上应取这个负数,但如果置成0就会取0,所以最开始要赋值为极小值(0x80808080),让他“被迫”选这个复数。

        2.写完之后,你会发现这道题像极了01背包,相应的,你也可以做同样的空间压缩。由于每次只与上一行有推导关系,可以将第一维删去。需要注意的是,如果你想访问上一轮的数据,在递推的第二层循环处你需要改成逆序。

相关文章:

[BCSP-X2024.小高3] 学习计划

题目描述 暑假共有 n 天&#xff0c;第 i 天的精力指数为 a[i]&#xff0c;你想要利用假期依次&#xff08;按 1,2,...,m 顺序&#xff09;复习 m 门功课&#xff0c;第 i 门功课的重要程度为 b[i]&#xff0c;且每门的复习时段必须连 续&#xff0c;并且不能有某天不干事。 …...

Android Debug Bridge(ADB)完全指南

文章目录 前言一、什么是ADB&#xff1f;二、ADB的工作原理ADB由三个部分组成&#xff1a; 三、如何安装ADBWindows系统&#xff1a;macOS和Linux系统&#xff1a; 四、ADB常用指令大全设备相关操作1. 查看连接的设备&#xff1a;2. 重启设备&#xff1a;3. 进入Bootloader模式…...

再次重逢,愿遍地繁花

再次重逢&#xff0c;愿遍地繁花 我并不是一个对最终幻想7很热衷的粉丝&#xff0c;也并没有像那些评论区的大佬&#xff0c;能够轻易地说出整部世界的全貌。说到底&#xff0c;我只是一个看完了《最终幻想7&#xff1a;重制版》和《最终幻想7&#xff1a;重生》的爱好者罢了。…...

数据结构和算法基础(一)

文章目录 链表反转链表合并删除链表倒数第 n 个结点找链表的中间结点链表中环的检测排序算法递归 趁空闲时间刷一遍极客时间上王争的《数据结构与算法之美》课程&#xff0c;个人觉得写的很好&#xff0c;每章节由浅入深且从基础到引入设计类问题&#xff0c;如果写过很多代码想…...

【超长好文】网络安全从业者面试指南

文章为笔者偶然看到的github项目《网络安全面试指南》&#xff0c;作者FeeiCN&#xff0c;读完内容深感作者的用心&#xff0c;尽管一些观点因为时间原因与当下行情存在差异&#xff0c;但仍旧值得大家参考&#xff0c;希望能给大家在这行业寒冬带来一些启发&#xff0c;愿正在…...

基于大数据的高校新生数据可视化分析系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

【cache】浅析四种常用的缓存淘汰算法 FIFO/LRU/LFU/W-TinyLFU

本文浅析淘汰策略与工作中结合使用、选取&#xff0c;并非针对算法本身如何实现的 文章目录 FIFOLFULRUW-TinyLFU实践与优化监控与调整 FIFO first input first output &#xff0c; 先进先出&#xff0c;即最早存入的元素最先取出&#xff0c; 典型数据结构代表&#xff1a;…...

STM32的DMA技术介绍

DMA&#xff08;Direct Memory Access&#xff0c;直接内存访问&#xff09; 是一种允许外设直接与系统内存进行数据传输&#xff0c;而无需经过CPU的技术。在STM32微控制器中&#xff0c;DMA技术极大地提高了数据传输效率&#xff0c;降低了CPU的负担&#xff0c;从而提升系统…...

C++11 多线程编程-小白零基础到手撕线程池

提示&#xff1a;文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问&#xff1a; 本文目标&#xff1a; 一、背景 来源于b站视频 C11 多线程编程-小白零基础到手撕线程池 学习来源&#xff1a;https://www.bilibili.com/video/BV1d841117SH/?p2&spm_id_f…...

智源研究院与百度达成战略合作 共建AI产研协同生态

2024年9月24日&#xff0c;北京智源人工智能研究院&#xff08;简称“智源研究院”&#xff09;与北京百度网讯科技有限公司&#xff08;简称“百度”&#xff09;正式签署战略合作协议&#xff0c;双方将充分发挥互补优势&#xff0c;在大模型等领域展开深度合作&#xff0c;共…...

Flask-SQLAlchemy:在Flask应用中优雅地操作数据库

在Python的Web开发领域&#xff0c;Flask是一个备受欢迎的轻量级Web框架&#xff0c;它以简洁、灵活而著称。而当我们需要在Flask应用中与数据库进行交互时&#xff0c;Flask-SQLAlchemy就成为了一个强大而便捷的工具。它将Flask的简洁性与SQLAlchemy的强大数据库抽象能力完美结…...

智能巡检机器人 数据库

智能巡检机器人AI智能识别。无需人工。只需后台监控结果即可&#xff01;...

Spring AOP异步操作实现

在Spring框架中&#xff0c;AOP&#xff08;面向切面编程&#xff09;提供了一种非常灵活的方式来增强应用程序的功能。异步操作是现代应用程序中常见的需求&#xff0c;尤其是在处理耗时任务时&#xff0c;它可以帮助我们提高应用程序的响应性和吞吐量。Spring提供了一种简单的…...

【2006.07】UMLS工具——MetaMap原理深度解析

文献&#xff1a;《MetaMap: Mapping Text to the UMLS Metathesaurus》2006 年 7 月 14 日 https://lhncbc.nlm.nih.gov/ii/information/Papers/metamap06.pdf MetaMap&#xff1a;将文本映射到 UMLS 元数据库 总结 解决的问题 自动概念映射问题&#xff1a;解决如何将文本…...

ros2 colcon build 构建后,install中的local_setup.bash 和setup.bash有什么区别

功能概述 在 ROS2 中&#xff0c;colcon build是用于构建软件包的工具。构建完成后会生成install文件夹&#xff0c;其中的setup.bash和local_setup.bash文件都与环境设置相关&#xff0c;但存在一些区别。setup.bash 作用范围 setup.bash文件用于设置整个工作空间的环境变量。…...

Thymeleaf基础语法

Thymeleaf 是一种用于 Web 和非 Web 环境的现代服务器端 Java 模板引擎。它能够处理 HTML、XML、JavaScript、CSS 甚至纯文本。以下是 Thymeleaf 的一些基础语法&#xff1a; 1. 变量表达式 <!-- 显示变量的值 --> <p th:text"${name}">Default Name&l…...

spring cloud alibaba学习路线

以下是一条学习Spring Cloud Alibaba的路线&#xff1a; 一、基础前置知识 1. Java基础 熟练掌握Java语言特性&#xff0c;包括面向对象编程、集合框架、多线程等知识。 2. Spring和Spring Boot基础深入理解Spring框架&#xff0c;如依赖注入&#xff08;DI&#xff09;、控…...

基于 Seq2Seq 的中英文翻译项目(pytorch)

项目简介 本项目旨在使用 PyTorch 构建一个基于 Seq2Seq(编码器-解码器架构)的中英文翻译模型。我们将使用双语句子对的数据进行训练,最终实现一个能够将英文句子翻译为中文的模型。项目的主要步骤包括: 数据预处理:从数据集中提取英文和中文句子,并进行初步清洗和保存。…...

部标主动安全(ADAS+DMS)对接说明

1.前言 上一篇介绍了部标&#xff08;JT/T1078&#xff09;流媒体对接说明&#xff0c;这里说一下如何对接主动安全附件服务器。 流媒体的对接主要牵扯到4个方面&#xff1a; &#xff08;1&#xff09;平台端&#xff1a;业务端系统&#xff0c;包含前端呈现界面。 &#x…...

C++ STL(1)迭代器

文章目录 一、迭代器详解1、迭代器的定义与功能2、迭代器类型3、示例4、迭代器失效4.1、vector 迭代器失效分析4.2、list 迭代器失效分析4.3、set 与 map 迭代器失效分析 5、总结 前言&#xff1a; 在C标准模板库&#xff08;STL&#xff09;中&#xff0c;迭代器是一个核心概念…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...