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

打卡信奥刷题(3348)用C++实现信奥题 P9505 『MGOI』Simple Round I | D. 魔法环

P9505 『MGOI』Simple Round I | D. 魔法环

题目背景

最好的武器不一定最适合,最适合的武器才最好。——
殿堂魔法士 W

题目描述

小 M 面临着激发自己魂器——魔法环的任务。

魔法环上有nnn个节点,每个节点上都有一个魔法精灵,每个魔法精灵都有一个固定的魔供值,这些魔供值形成一个0∼n−10 \sim n-10n1的排列。

小 M 可以选择激活或不激活一个魔法精灵,但为了激发魔法环,必须至少激活k(≥2)k(\ge 2)k(2)个魔法精灵。

每个魔法精灵无论是否激活都会产生附魔值

  • 对于一个被激活的魔法精灵,它产生的附魔值为它的魔供值的平方
  • 对于一个未被激活的魔法精灵,它会在环上朝左右看,分别看向两边最近的被激活的魔法精灵。它会选择其中魔供值较大的一个作为「目标精灵」,产生的附魔值为这个「目标精灵」的魔供值与看向这个「目标精灵」时视线经过的距离乘积

作为新手,小 M 希望在激活魔法环的前提下,使得所有魔法精灵的附魔值之和最小,从而更好地控制魔法环的能量。

输入格式

第一行两个整数n,kn,kn,k

第二行nnn个整数,表示每个节点上魔法精灵的魔供值。

输出格式

一行一个整数,表示最小附魔值之和。

输入输出样例 #1

输入 #1

5 2 3 0 1 4 2

输出 #1

7

输入输出样例 #2

输入 #2

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

输出 #2

53

说明/提示

【样例 1 解释】

激活魔供值为000111的魔法精灵。

  • 魔供值为333的魔法精灵,选择魔供值为111的魔法精灵,产生的附魔值为1×3=31 \times 3 = 31×3=3
  • 魔供值为000的魔法精灵被激活,产生的附魔值为02=00^2=002=0
  • 魔供值为111的魔法精灵被激活,产生的附魔值为12=11^2=112=1
  • 魔供值为444的魔法精灵,选择魔供值为111的魔法精灵,产生的附魔值为1×1=11 \times 1 = 11×1=1
  • 魔供值为222的魔法精灵,选择魔供值为111的魔法精灵,产生的附魔值为1×2=21 \times 2 = 21×2=2

总共产生的附魔值为777

【数据范围】

本题采用 Subtask 捆绑测试。

对于所有数据,2≤k≤n≤30002\le k \le n \le 30002kn3000k≤100k \le 100k100,每个节点上魔法精灵的魔供值形成一个0∼n−10\sim n-10n1的排列。

Subtasknnnk≤k\lek分值
111101010101010131313
222100100100100100100171717
333300300300100100100212121
444100010001000100100100232323
555300030003000100100100262626

C++实现

#include<bits/stdc++.h>usingnamespacestd;constintN=3010,M=105;intp[N],q[N];longlongdp[N][M];inlinelonglongval(intpl,intpr){intcnt=(pr-pl-1)*(pr-pl)>>1;return1ll*max(p[pl],p[pr])*cnt+p[pr]*p[pr];}intmain(){intn,m,pos;scanf("%d%d",&n,&m);for(inti=1;i<=n;i++)scanf("%d",&q[i]);for(inti=1;i<=n;i++)if(!q[i])pos=i;for(inti=1;i<=n;i++)p[i]=q[(i+pos-1-1)%n+1];memset(dp,127,sizeof(dp));dp[1][1]=0;for(inti=1;i<=n;i++){for(intj=2;j<=min(i,m);j++){for(intk=1;k<i;k++){dp[i][j]=min(dp[i][j],dp[k][j-1]+val(k,i));if(j==m)dp[i][j]=min(dp[i][j],dp[k][j]+val(k,i));}}}longlongans=LLONG_MAX;for(inti=1;i<=n;i++)ans=min(ans,dp[i][m]+val(i,n+1));printf("%lld",ans);return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

http://www.gsyq.cn/news/1439491.html

相关文章:

  • 2026年最新德阳市金银首饰回收+金条金币+铂金K金 高价回收;实体老店回收黄金 多年口碑 交易放心;TOP5实力权威排行榜推荐+联系方式 - 亦辰小黄鸭
  • 2026年5月广州除甲醛公司推荐:靠谱品牌TOP榜单深度测评解析 - 品牌推荐
  • 如何快速突破百度网盘限速:3步实现免费高速下载的完整方案
  • 别再用裸机死循环了!用STM32CubeMX+FreeRTOS实现多任务切换,保姆级配置流程(Keil仿真)
  • 避坑指南:OV9281调试中HTS/VTS与曝光时间的那些‘坑’(附计算工具与排查思路)
  • 从Arduino到3D打印机:手把手教你用TB6600HG驱动42步进电机(含电流调节与散热指南)
  • AI招聘全流程应用指南:从人才寻源到智能决策的实践与风险应对
  • 从GUI Guide迁移到APP Designer:老用户避坑指南与一个完整数据绘图App实战
  • 神经网络似然估计加速引力波数据分析
  • ESP32-S3内存爆了?手把手教你用TVM和ESP-DL部署YOLOX-Nano(含PSRAM优化避坑指南)
  • 从行为主义到认知理解:AI为何难以跨越“理解”鸿沟
  • 别再裸机点灯了!用STM32CubeMX快速给你的项目加上FreeRTOS实时系统
  • 告别Burpsuite?试试这款国产一体化渗透测试工具Yakit的安装与初体验
  • 在安卓手机上用LXC跑Ubuntu并部署Docker,我踩过的那些坑(附完整修复脚本)
  • 量子混沌控制:理论与实验突破
  • 智能视觉孪生内核,引领行业视频孪生技术革新
  • 告别报错!Win10下Autodock Vina 1.2.3完整安装与避坑指南(附批量脚本)
  • Cadence SPB17.4出Gerber后,用CAM350拼板时槽孔文件(.rou)报错?试试这个无损转换的“中间人”方案
  • 工业流程可视化动态方案:FUXA管道动画技术实现与应用指南
  • 2026 江苏徐州彩钢瓦金属屋面防水防腐 TOP5:本地人必选靠谱公司与避坑指南 - 本地便民网
  • 设备树修改
  • 双系统安装翻车后,如何用Windows自带工具彻底清理Ubuntu残留(含EFI分区删除指南)
  • 2025-2026年北京国际幼儿园推荐:五大排行评测园区融合特点价格选择指南 - 品牌推荐
  • 从关键词匹配到语义理解:AI时代的内容优化新范式
  • 如何快速掌握智慧树刷课插件:终极学习效率提升指南
  • 手把手教你用STM32F103C8T6驱动MAX30102,在0.96寸OLED上做个心率血氧仪(附完整代码)
  • 系统设计中的用户引导与自动化:从默认选项到智能服从的架构解析
  • 避坑指南:ESP32驱动SSD1306 OLED,Adafruit库SPI和I2C模式到底怎么选?实测对比告诉你
  • 《电脑显示器哪家好:排名前五专业深度测评》 - 服务品牌热点
  • Windows下PostgreSQL ZIP版保姆级安装教程(含远程访问配置与系统服务注册)