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

P15906 [TOPC 2024] Business Magic 题解

P15906 [TOPC 2024] Business MagicLink: https://www.luogu.com.cn/problem/P15906题目描述沿街有n nn家商店按从近到远的顺序编号为1 11到n nn。上个月商店k kk的净利润为r k r_krk​。如果r k r_krk​为正表示盈利r k r_krk​美元如果r k r_krk​为负表示亏损− r k -r_k−rk​美元。作为一名商业魔法大师你拥有两种魔法可以用来改变这些商店下个月的净利润蓝魔法你可以选择一个连续的区间[ L , R ] [L, R][L,R]。该魔法的效果是将从商店L LL到商店R RR包含两端的每家商店的净利润翻倍。也就是说如果k ∈ [ L , R ] k \in [L, R]k∈[L,R]那么商店k kk下个月的净利润为2 r k 2r_k2rk​。绿魔法你可以选择任意一家商店对其施放绿魔法。绿魔法的效果是将该商店下个月的净利润变为上个月净利润的相反数。任何未受任何魔法影响的商店其下个月的净利润与上个月相同。然而施放魔法时有一些限制。你只能施放一次蓝魔法且必须在绿魔法之前施放。此外绿魔法不能施放在任何已经受到蓝魔法影响的商店上。你的任务是确定在最优施放魔法后所有商店下个月净利润总和的最大可能值。输入格式第一行包含一个整数n nn表示商店的数量。第二行包含n nn个空格分隔的整数r 1 , r 2 , … , r n r_1, r_2, \dots, r_nr1​,r2​,…,rn​其中r k r_krk​是商店k kk上个月的净利润。输出格式输出一个整数表示在最优施放魔法后所有商店下个月净利润总和的最大可能值。输入输出样例 #1输入 #15 -2 5 -3 4 -1输出 #120输入输出样例 #2输入 #27 -1 -1 -1 -1 -1 -1 -1输出 #27输入输出样例 #3输入 #34 998244353 864197532 -7 1000000000输出 #35724883756说明/提示1 ≤ n ≤ 3 × 10 5 1 \le n \le 3 \times 10^51≤n≤3×105− 10 9 ≤ r k ≤ 10 9 -10^9 \le r_k \le 10^9−109≤rk​≤109对于k ∈ { 1 , 2 , … , n } k \in \{1, 2, \dots, n\}k∈{1,2,…,n}Solution1. 题意有一个数组蓝魔法可将一段区间内的所有数字加倍绿魔法可将一段区间内所有数字变为相反数。求使用魔法后数组数字总和最大多少。2. 分析本题可算作贪心动态规划的混搭问题。为简明起见我们把初始状态叫做状态 0。贪心部分对状态 0 如果只使用绿魔法那么只要把所有亏损的店变为相反数扭亏为盈即可这种情况下的总利润就是所有数绝对值之和我们把这个已经用绿魔法全部扭亏为盈的状态叫做状态 1。动态规划部分我们考虑在状态 1 的基础上继续推演蓝魔法作用在原本就盈利r k 0 r_k0rk​0的店铺产生的额外利润是2 r k − r k r k 2r_k-r_k r_k2rk​−rk​rk​蓝魔法作用在经绿魔法扭亏为盈的店铺r k 0 r_k0rk​0由于题目限定蓝魔法不能在绿魔法已经起效的作用下继续使用因此等效结果相当于去掉已有的绿魔法换成蓝魔法产生的贡献是r k − ( − 2 r k ) 3 r k r_k-(-2r_k)3r_krk​−(−2rk​)3rk​注意3 r k 3r_k3rk​是一个负值表示的是蓝魔法相比于状态 1 产生的额外亏损。概括起来相交于状态 1蓝魔法对净利润的贡献是盈利盈一倍亏损亏三倍。建立一个在状态 1 的基础上的关于净利润的数组后这个数组显然是有正有负的所求的就是净利润数组的最大子段和。特别注意如果最大子段和为负当且仅当状态 0 下所有的数皆为负数才会出现此种情况那么最大子段和就是空串的最大子段和为零此时最优解就是不使用蓝魔法3. 代码usingSystem;classP15906{staticvoidMain(){intnConvert.ToInt32(Console.ReadLine());// 原始盈利情况long[]rawnewlong[n1];// 蓝魔法贡献通常有正有负long[]contributenewlong[n1];varinputsConsole.ReadLine().Split();for(inti1;in;i){raw[i]Convert.ToInt64(inputs[i-1]);}// 总收入longtotal0;for(inti1;in;i){totalMath.Abs(raw[i]);}// 蓝魔法效果for(inti1;in;i){// 盈利盈一倍,亏损亏三倍contribute[i]raw[i]*(raw[i]0?1:3);}// currentMax: 最大子段和extra: 全局最大子段和longcurrentMax0,extra0;for(inti1;in;i){currentMaxMath.Max(currentMaxcontribute[i],contribute[i]);extraMath.Max(extra,currentMax);}Console.WriteLine(totalextra);}}
http://www.zskr.cn/news/1336486.html

相关文章:

  • 从SE到Dual-Attention:手把手教你为YOLOv8或ResNet模型‘加装’注意力模块提升指标
  • 告别真机折腾!用这款免费RAID模拟器在家搞定RAID 0/1/5/10配置实验
  • ADF4350频点锁定与电源滤波实战:为什么你的VCO输出有噪声?加个钽电容试试!
  • IT工程/项目计划概要~项目结束表(模版)
  • Swift底层多线程:POSIX线程封装与安全并发实践
  • PLC控制柜制造:从电气设计到自动化稳定运行的完整解析
  • Windows 11/10下VMware Workstation 17开机自启虚拟机完整配置流程(含权限修复与延迟启动设置)
  • 保姆级教程:用树莓派3B+VRPN,把NOKOV动捕数据喂给Pixhawk飞控
  • AI插件深度对比 | Copilot、Tabnine、Codeium谁是王者
  • 手把手教你用STM32的编码器模式,精准读取JGB37-520电机转速(附TB6612驱动配置)
  • XInputTest:精准测量游戏手柄轮询率与延迟的专业工具
  • 2026年比较好的广东非标胶辊定制/设备配套胶辊/自动化设备胶辊厂家精选合集 - 行业平台推荐
  • 告别手动标注!用X-AnyLabeling的AI辅助功能,5分钟搞定100张图片
  • 还在加班撰写述职报告?2026全能AI办公利器,轻松搞定年度述职文稿
  • 从XXE到RCE:手把手拆解Vulnhub靶场中那段‘天书’PHP代码的奥秘
  • Fluent后处理进阶:除了速度云图,教你用‘投影’和‘剔除’分析复杂流动方向
  • 高效Debug:Display策略与工具链实战指南
  • 2026年高抗冲击的PVC发泡型材/PVC型材/PVC密封条型材深度厂家推荐 - 行业平台推荐
  • 2026年比较好的广东印刷胶辊滚筒/包装印刷胶辊/印铁机胶辊/印刷设备胶辊公司哪家好 - 品牌宣传支持者
  • 2026年靠谱的EPDM工业胶辊/设备配套胶辊品牌厂家推荐 - 品牌宣传支持者
  • Redis对象类型与底层数据结构
  • 5个关键挑战:BiliTools跨平台架构如何应对大规模视频下载的性能瓶颈
  • nuScenes数据集“平替”指南:Mini版够用吗?完整版、Test版到底怎么选?
  • 告别VS Code C++插件卡顿:用Clangd+CMake打造丝滑的嵌入式代码补全环境(附完整配置流程)
  • 废水监测设备哪家强?江苏做监测设备运维的公司有哪些?COD氨氮重金属水质监测设备厂家盘点,认准江苏卓正 - 栗子测评
  • 告别手写!用Playwright Codegen录制脚本,5分钟搞定百度搜索自动化
  • S32K146开发实战:手把手教你用EB Tresos配置Autosar MCAL的GPT定时器
  • 2026年抗静电的PVC型材/电器用PVC型材/PVC异型材厂家推荐与选型指南 - 品牌宣传支持者
  • 告别手动启停:为你的Cassandra 4.0.1写一个保姆级Systemd服务管理脚本
  • 别再只打包AppImage了!在银河麒麟V10上为Electron应用制作专业deb安装包的完整流程