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上无缝运行安卓应用

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:59:09阅读更多 →
一年前他想要AI当CEO,今天他说“我错了“

一年前他想要AI当CEO,今天他说“我错了“

2024年11月,在一档热门播客节目里,萨姆奥尔特曼说过一句在当时看来并不奇怪的话。他说,如果有其他公司抢在OpenAI前面用AI模型取代了CEO,那对OpenAI而言就是一种失败。"如果OpenAI不是第一家由AI CEO管理的大公司&#xff0c…

2026/7/29 8:59:09阅读更多 →
S32G2汽车网关开发实战:从核心原理到多核通信与性能优化

S32G2汽车网关开发实战:从核心原理到多核通信与性能优化

1. 项目概述:为什么S32G2是汽车网关与域控制器的“硬通货”如果你最近在关注汽车电子,尤其是智能座舱、自动驾驶或者整车电子电气架构的演进,那么NXP的S32G2这个名字你一定不会陌生。它早已不是一颗简单的车规级处理器,而是成为了…

2026/7/29 8:59:09阅读更多 →
【无功优化】配电网+电动汽车V2G+无功优化研究(Matlab代码实现)

【无功优化】配电网+电动汽车V2G+无功优化研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

2026/7/29 10:19:28阅读更多 →
考虑电动汽车 V2G 的配电网多源协同无功优化研究(Matlab代码实现)

考虑电动汽车 V2G 的配电网多源协同无功优化研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

2026/7/29 10:19:28阅读更多 →
面向算力 - 电力 - 热力耦合综合能源系统的协同优化调度研究(Matlab代码实现)

面向算力 - 电力 - 热力耦合综合能源系统的协同优化调度研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

2026/7/29 10:19:28阅读更多 →
【承载力评估】配电网+多渗透率电动汽车接入研究(Matlab代码实现)

【承载力评估】配电网+多渗透率电动汽车接入研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

2026/7/29 10:19:28阅读更多 →
千笔AI论文写作工具功能解析与使用技巧

千笔AI论文写作工具功能解析与使用技巧

1. 千笔AI论文写作工具深度解析作为一名在学术领域深耕多年的研究者,我最近系统测试了这款号称"全学科适配"的AI论文写作工具。经过为期三周的深度使用,我将从实际体验出发,分享这款工具的核心功能、适用场景以及使用技巧。2. 核心…

2026/7/29 10:19:28阅读更多 →
Spring AI中Token成本优化与结构化输出实践

Spring AI中Token成本优化与结构化输出实践

1. Spring AI 中的 Token 成本优化实战在 Spring AI 项目中,Token 成本是直接影响项目经济性的关键指标。以 GPT-3.5 为例,每 1000 个 Token 的成本约为 $0.002,看似微小但在高频调用场景下会快速累积。我在电商客服机器人项目中就曾遇到月均…

2026/7/29 10:17:28阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/29 9:47:45阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/29 7:00:19阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/29 7:58:51阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →