P2386 放苹果

发布时间:2026/7/29 8:58:51

P2386 放苹果
记录163#includebits/stdc.h // 引入万能头文件包含所有常用的标准库 using namespace std; // 使用标准命名空间 int t,m,n; // 定义全局变量t(测试数据组数)、m(苹果数)、n(盘子数) int ans; // 定义全局变量ans用来记录当前测试数据的合法方案总数 // remain_apple: 当前还剩下多少个苹果没放 // remain_plate: 当前还剩下多少个盘子没放 // min_apple: 当前这个盘子至少要放多少个苹果保证非递减避免重复 void dfs(int remain_apple,int remain_plate,int min_apple){ // 如果只剩下最后1个盘子剩下的苹果全部放进去这算作一种合法方案 if(remain_plate1){ ans; // 方案数加1 return; // 结束当前递归分支 } // 枚举当前盘子放多少个苹果从min_apple开始枚举 // 剪枝因为后面还有remain_plate-1个盘子且每个至少放i个 // 所以当前最多只能放 remain_apple / remain_plate 个 for(int imin_apple;iremain_apple/remain_plate;i){ dfs(remain_apple-i,remain_plate-1,i); // 递归搜索下一个盘子传入减去i后的剩余苹果盘子数减1最小可选值更新为i } } int main(){ // 主函数入口 ios::sync_with_stdio(false); // 关闭cin与stdio的同步加快输入输出速度 cin.tie(0); // 解除cin与cout的绑定进一步加快IO效率 cint; // 输入测试数据的组数t while(t--){ // 循环t次处理每一组测试数据 cinmn; // 输入当前组的苹果数m和盘子数n ans0; // 每次测试数据开始前将方案数清零 dfs(m,n,0); // 调用dfs开始搜索初始剩余m个苹果需放n个盘子最小从0开始选允许空盘 coutans\n; // 输出当前测试数据的合法方案总数 } return 0; // 主函数正常结束返回0 }题目传送门https://www.luogu.com.cn/problem/P2386前言我是一名专注信奥赛GESP、CSP-J/S的教练。如果你觉得这篇题解对你有帮助欢迎点击关注我的CSDN账号我会持续更新高质量算法解析。我深知算法思维的构建远比单纯通过题目更重要本系列题解不局限于AC代码的堆砌而是致力于拆解题目背后的逻辑链条与核心知识点备赛路上若遇瓶颈欢迎随时评论或私信我将甄选典型疑难问题通过视频讲解或撰写专项文章的形式为你提供深度答疑。核心解题思路这道题是一道非常经典的组合数学与深度优先搜索DFS剪枝问题。问题转化非递减序列模型题目要求将 mm 个相同的苹果放入 n 个相同的盘子且允许空盘。因为盘子是相同的所以 (5,1,1) 和 (1,1,5) 被视为同一种方案。为了避免重复计数我们可以强制规定每个盘子放的苹果数量呈非递减顺序即前一个盘子放的苹果数 ≤≤ 后一个盘子放的苹果数。这样每一种合法的分配方案都唯一对应一个非递减序列。算法设计DFS 与剪枝优化我们可以使用 DFS 逐个盘子进行分配。在搜索过程中需要维护三个状态剩余苹果数、剩余盘子数、以及当前盘子至少需要放的苹果数即上一个盘子放的苹果数保证非递减。边界条件当剩余盘子数为 1 时说明前面的盘子都已经分配完毕剩下的苹果必须全部放入最后一个盘子。由于是非递减序列只要前面的分配合法最后一步必然合法直接方案数加 1 并返回。枚举与剪枝对于当前盘子枚举放入的苹果数 i 。下界是min_apple上界则是通过平均值剪枝得出的为了保证剩下的盘子也能满足非递减条件当前盘子最多只能放remain_apple / remain_plate个苹果。这极大地减少了搜索树的规模。代码分块详细解释1. 全局变量与函数签名定义#includebits/stdc.h using namespace std; int t, m, n; // 定义全局变量t(测试数据组数)、m(苹果数)、n(盘子数) int ans; // 定义全局变量ans用来记录当前测试数据的合法方案总数 // remain_apple: 当前还剩下多少个苹果没放 // remain_plate: 当前还剩下多少个盘子没放 // min_apple: 当前这个盘子至少要放多少个苹果保证非递减避免重复 void dfs(int remain_apple, int remain_plate, int min_apple){详细分析定义了三个全局变量用于主循环控制。dfs函数是核心搜索函数参数设计非常精妙min_apple参数完美地解决了“盘子相同导致方案重复”的问题它充当了当前枚举的下界强制后续的分配不会小于之前的分配。2. 核心逻辑边界处理与剪枝枚举// 如果只剩下最后1个盘子剩下的苹果全部放进去这算作一种合法方案 if(remain_plate 1){ ans; // 方案数加1 return; // 结束当前递归分支 } // 枚举当前盘子放多少个苹果从min_apple开始枚举 // 剪枝因为后面还有remain_plate-1个盘子且每个至少放i个 // 所以当前最多只能放 remain_apple / remain_plate 个 for(int i min_apple; i remain_apple / remain_plate; i){ dfs(remain_apple - i, remain_plate - 1, i); // 递归搜索下一个盘子 } }详细分析边界处理当remain_plate 1时意味着只剩下一个盘子此时无论剩下多少苹果都只能全放进去。由于我们一直在维护非递减序列只要前面的分配合法最后一步必然合法因此直接ans并返回。循环与剪枝for循环的下界是min_apple保证了非递减上界是remain_apple / remain_plate这是极其关键的平均值剪枝。假设还剩 10 个苹果和 4 个盘子当前盘子最多只能放 10/4210/42 个因为如果放 3 个剩下的 7 个苹果分给 3 个盘子平均值大于 2必然违反非递减规则。这个剪枝将时间复杂度大幅降低。3. 主函数多组数据测试与状态重置int main(){ ios::sync_with_stdio(false); cin.tie(0); cin t; while(t--){ cin m n; ans 0; // 每次测试数据开始前将方案数清零 dfs(m, n, 0); // 调用dfs开始搜索初始剩余m个苹果需放n个盘子最小从0开始选允许空盘 cout ans \n; } return 0; }详细分析主函数处理多组测试数据。每次调用dfs前必须将全局变量ans重置为 0。初始调用时min_apple传入 0完美契合了题目中“允许有的盘子空着不放”的条件。核心逻辑总结代码模块核心变量/操作精炼作用解决的痛点非递减约束min_apple参数传递记录上一个盘子放的苹果数作为当前枚举下界完美解决了“盘子相同导致 (5,1,1) 和 (1,1,5) 重复计数”的痛点边界快速返回if(remain_plate 1)仅剩一个盘子时直接累加方案数避免了无意义的深层递归提升了搜索效率平均值剪枝i remain_apple / remain_plate限制当前盘子能放苹果的最大值极大地缩减了搜索树的规模防止超时状态重置ans 0每组测试数据开始前清零计数器保证多组测试数据之间的独立性防止答案污染允许空盘初始调用dfs(m, n, 0)将初始最小苹果数设为 0满足了题目中“允许有的盘子空着不放”的特殊要求

相关新闻

Windows Subsystem for Android开发指南:在Windows 11上无缝运行安卓应用

Windows Subsystem for Android开发指南:在Windows 11上无缝运行安卓应用

2026/7/29 8:58:51

Windows Subsystem for Android开发指南:在Windows 11上无缝运行安卓应用 【免费下载链接】WSA Developer-related issues and feature requests for Windows Subsystem for Android 项目地址: https://gitcode.com/gh_mirrors/ws/WSA Windows Subsystem for…

触控钢琴开发实战:从音频引擎到交互设计的完整实现

触控钢琴开发实战:从音频引擎到交互设计的完整实现

2026/7/29 8:48:51

1. 项目概述:从“玩具”到“乐器”的触控钢琴 几年前,我第一次在朋友家看到一个平板电脑上的钢琴应用,孩子用手指在上面划来划去,发出叮叮咚咚的声音。当时我的第一反应是:这玩意儿就是个电子玩具,跟真正的…

RAG技术解析:大语言模型与实时知识库的融合实践

RAG技术解析:大语言模型与实时知识库的融合实践

2026/7/29 8:48:51

1. RAG技术概述:当大语言模型遇见实时知识库 三年前我第一次尝试用GPT-3构建企业知识问答系统时,遇到了经典的知识时效性问题——模型对2021年之后的新政策、新产品完全不了解。当时尝试的微调方案不仅成本高昂,每次知识更新都需要重新训练模…

从零搭建Linux应急响应靶场:Webshell攻防实战与Kali取证分析

从零搭建Linux应急响应靶场:Webshell攻防实战与Kali取证分析

2026/7/29 9:48:53

1. 项目概述与核心价值 最近几年,无论是企业安全建设还是个人技能提升,“应急响应”都从一个专业术语变成了一个高频热词。你可能在各种安全招聘要求里见过它,在各种CTF比赛和“护网”行动中听过它,但真要自己上手,面对…

教培行业学习飞橙教育课程有效果吗?

教培行业学习飞橙教育课程有效果吗?

2026/7/29 9:48:53

飞橙教育这是一家致力于帮助企业通过短视频、直播、AI等新营销方式实现低成本高效率获客,成立以来已服务超过36800家企业,培训学员超10万人次。在教培行业,飞橙教育赋能了大量从零起步的机构。其中最具代表性的,就是西南艺术培训巨…

3D打印模型修复全攻略:从数字修复到物理加固实战指南

3D打印模型修复全攻略:从数字修复到物理加固实战指南

2026/7/29 9:48:53

1. 从“模型破损”到“完美修复”:一个3D打印玩家的日常 如果你玩3D打印有一段时间了,那么下面这个场景你一定不陌生:花了好几个小时甚至一整天,打印机终于安静下来,你满怀期待地走到打印平台前,小心翼翼地…

超轻粘土与电子模块结合:制作会发声的互动玩具全攻略

超轻粘土与电子模块结合:制作会发声的互动玩具全攻略

2026/7/29 9:48:53

1. 项目缘起:从“会叫”的创意到“奶瓶怪”的诞生 最近在手工圈子里,超轻粘土创作的热度一直居高不下,从简单的卡通摆件到复杂的场景搭建,大家都在比拼创意和手艺。我自己也玩粘土好几年了,从最初捏个歪歪扭扭的小动物…

基于Edison的智能夜光宝盒:从传感器到执行器的完整交互装置实践

基于Edison的智能夜光宝盒:从传感器到执行器的完整交互装置实践

2026/7/29 9:48:53

1. 项目概述:从“夜光宝盒”到创意交互装置看到“夜光宝盒”这个项目标题,再结合“Edison教程系列”这个前缀,我脑海里立刻浮现出一个典型的创客项目:它绝不仅仅是一个会发光的盒子。Edison作为一款集成了Wi-Fi和蓝牙的微型计算平…

2026绿色工厂申报必过方案!开源智碳EMS,完美对标国标评审指标,告别手工台账

2026绿色工厂申报必过方案!开源智碳EMS,完美对标国标评审指标,告别手工台账

2026/7/29 9:38:53

前言:2026绿色工厂最大翻车点——没有数字化能碳平台今年申报绿色工厂的企业普遍遇到同一个问题:资料做的再漂亮,没有系统自动采集、自动统计、全程可追溯的能耗碳数据,直接扣分、甚至不予通过。根据2026新版绿色工厂评价规则&…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/28 13:30:18

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/28 16:04:36

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/28 16:04:35

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

AI会议纪要怎么做?会议录音转文字加自动整理,三个月实测流程

AI会议纪要怎么做?会议录音转文字加自动整理,三个月实测流程

2026/7/29 0:08:23

打工人总是跑不掉要写会议纪要。 我在一家互联网公司,一周至少八场会:产品评审、数据复盘、项目同步、客户沟通,每场一小时起步。 以前的标准流程是开会拼命记→会后凭记忆补→整理成文档发群,结果经常记不全、记错、记串。 大概年…

重庆化龙桥老旧小区改造,怎么搞定夜景照明“不扰居”又能省成本?

重庆化龙桥老旧小区改造,怎么搞定夜景照明“不扰居”又能省成本?

2026/7/29 0:08:23

重庆化龙桥靠着嘉陵江,老小区多,最近几年城市更新做的勤,不少住户都反映过小区夜景亮了是好事,可有的灯太晃眼,半夜拉着窗帘都透光,睡不好觉。还有物业算账,这灯开一整晚,公摊电费蹭…

目标模糊、资源泛滥、进度失控,AI学习计划制定失败的3大隐形陷阱及救急方案

目标模糊、资源泛滥、进度失控,AI学习计划制定失败的3大隐形陷阱及救急方案

2026/7/29 0:08:23

更多请点击: https://codechina.net 第一章:目标模糊、资源泛滥、进度失控,AI学习计划制定失败的3大隐形陷阱及救急方案 目标模糊:学得越勤,离真实能力越远 当学习目标停留在“学会AI”或“搞懂大模型”这类宽泛表述…