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

题解:洛谷 P10971 Cookies

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。欢迎大家订阅我的专栏算法题解C与Python实现附上汇总贴算法竞赛备考冲刺必刷题C | 汇总【题目来源】洛谷P10971 Cookies - 洛谷【题目描述】圣诞老人共有M MM个饼干准备全部分给N NN个孩子。每个孩子有一个贪婪度第i ii个孩子的贪婪度为g i g_igi​。如果有a i a_iai​个孩子拿到的饼干数比第i ii个孩子多那么第i ii个孩子会产生g i × a i g_i\times a_igi​×ai​的怨气。给定N NN、M MM和序列g gg圣诞老人请你帮他安排一种分配方式使得每个孩子至少分到一块饼干并且所有孩子的怨气总和最小。【输入】第一行包含两个整数N , M N,MN,M。第二行包含N NN个整数表示g 1 , g 2 , … , g n g_1,g_2,\dots,g_ng1​,g2​,…,gn​。【输出】第一行一个整数表示最小怨气总和。第二行N NN个空格隔开的整数表示每个孩子分到的饼干数若有多种方案输出任意一种均可。【输入样例】3 20 1 2 3【输出样例】2 2 9 9【算法标签】#提高plus #线性DP-一维【代码详解】#includebits/stdc.husingnamespacestd;typedefpairint,intPII;// 定义键值对类型用于记录路径constintN35,M5005;// 常量定义最大孩子数和最大糖果数intn,m;// n: 孩子数量m: 糖果总数ints[N];// 前缀和数组s[i]表示前i个孩子的不满值之和intf[N][M];// DP数组f[i][j]表示前i个孩子分配j个糖果的最小总怨气值PII pre[N][M];// 路径记录数组记录状态转移的前驱状态intans[N];// 结果数组记录每个孩子分配的糖果数structNode{intg,idx;// g: 孩子的不满值idx: 孩子原始编号}c[N];// 比较函数按不满值从大到小排序boolcmp(Node x,Node y){returnx.gy.g;}// 递归打印路径函数根据记录的前驱状态回溯voidprint_path(PII now){intchildnow.first,cooknow.second;// child: 当前孩子数cook: 当前糖果数if(child0)return;// 递归终止条件没有孩子print_path(pre[child][cook]);// 递归处理前驱状态intpre_childpre[child][cook].first;// 前驱状态的孩子数if(pre_childchild)// 如果前驱状态孩子数相同说明当前组每人分到一个糖果{for(inti1;ichild;i)// 给当前组所有孩子分配糖果ans[c[i].idx];}else// 否则说明当前组是新的一组{for(intipre_child1;ichild;i)// 给新组的所有孩子分配糖果ans[c[i].idx];}}intmain(){cinnm;// 输入孩子数量和糖果总数for(inti1;in;i)// 输入每个孩子的不满值{cinc[i].g;c[i].idxi;// 记录原始编号}sort(c1,cn1,cmp);// 按不满值从大到小排序for(inti1;in;i)// 计算前缀和s[i]s[i-1]c[i].g;memset(f,0x3f,sizeof(f));// 初始化DP数组为无穷大f[0][0]0;// 边界条件0个孩子分配0个糖果的怨气值为0for(inti1;in;i)// 枚举孩子数for(intji;jm;j)// 枚举糖果数至少要有i个糖果{// 情况1每人分一个糖果f[i][j]f[i][j-i];// 转移方程pre[i][j]{i,j-i};// 记录前驱状态// 情况2最后一批孩子分到额外的糖果for(intk0;ki;k)// 枚举上一批孩子的数量{// 计算从k个孩子扩展到i个孩子的最小怨气值if(f[i][j]f[k][j-(i-k)](s[i]-s[k])*k){f[i][j]f[k][j-(i-k)](s[i]-s[k])*k;pre[i][j]{k,j-(i-k)};// 记录前驱状态}}}coutf[n][m]endl;// 输出最小总怨气值print_path({n,m});// 回溯计算每个孩子的糖果数for(inti1;in;i)// 输出每个孩子分配的糖果数coutans[i] ;coutendl;return0;}【运行结果】3 20 1 2 3 2 6 7 7
http://www.rkmt.cn/news/1381104.html

相关文章:

  • Cursor 把内部代码审查工具放出来了,AI 写代码之后,质量风险变了
  • 终极崩坏星穹铁道自动化指南:3分钟掌握解放双手的智能游戏伴侣
  • 实测对比,使用Taotoken聚合接口后Agent任务延迟与稳定性观感
  • 绩效评估方法
  • Group名,topic,tag分别有什么用
  • Umi-OCR深度指南:3个场景解锁离线OCR的无限潜能
  • 部分非计算机专业考研初试考408的信息汇总
  • 创新教育研究——教育进展——期刊_汉斯出版社​——版面费1600-1900-oa期刊-回复hk。
  • 强力解锁:如何30秒内将B站缓存视频永久保存为MP4格式
  • 在C++中正确处理日期字符串排序的方法
  • 智慧树自动刷课插件终极指南:告别手动操作,3步实现高效学习
  • 如何3分钟掌握百度网盘高速下载技巧:Python直链获取完全指南
  • 从定长到变长再到中断:深入对比三种CPU时序设计,哪种更适合你的MIPS指令集实验?
  • 打卡信奥刷题(3315)用C++实现信奥题 P9184 [USACO23OPEN] Moo Language B
  • 深度解析开源STL到STEP转换工具:stltostp实现3D模型格式无缝互通的完整指南
  • 从齐纳噪声到单光子探测:深入解析雪崩击穿原理与测量实践
  • macOS音频优化终极指南:免费版eqMac与专业版完整功能对比
  • 静态二进制重写技术:原理、优势与应用实践
  • Coding Plan又添一员大将,支持国产顶级模型,暂时不用抢购
  • 免费音乐解锁工具终极指南:3分钟学会解锁加密音乐文件
  • 为什么你的组件库没人用?Lovable前端架构师的6个反直觉设计原则(含Axure原型包)
  • 如何5分钟将B站m4s缓存视频转换为MP4格式:完整免费教程
  • 3步告别网盘限速:LinkSwift直链下载助手完全实战手册
  • Midjourney霓虹效果从入门到失控(霓虹过曝/色彩断层/边缘锯齿三大灾难级问题根因溯源)
  • 如何高效实现Windows自动化鼠标点击:AutoClicker完整实战指南
  • 2026广告咨询选哪家?这3条避坑指南别错过
  • 如何让旧款Mac运行最新系统:OpenCore Legacy Patcher完整指南
  • 【Claude战略适配黄金法则】:基于127家头部客户PEST建模数据,锁定AI投入ROI拐点
  • 【官方重磅】2026年6月百达翡丽全国售后维修保养网点大更新!45家授权服务中心新址公布,服务热线400-106-3365全面启用,立即收藏! - 资讯纵览
  • 【IF-SAFE-02】功能安全入门:基础设施安全 - 电源/时钟/SCU的守护