ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[CF1699E] Three Days Grace 题解

2022-07-08 11:35:35  阅读:199  来源: 互联网

标签:最小值 题解 最大值 Three Grace 枚举 考虑 转移 指针


CF link

你谷 link

一道非常巧妙的 dp 题,但是顺着思路水到渠成并不是完全无迹可寻。

首先观察到题面中答案的形式是最值相减,提醒我们使用双指针的思想,即枚举最小值的过程中动态单调维护最大值,同时注意到本题中的操作类型是将一个数拆成两个数相乘的形式,所以可以想到是从大到小枚举,且思考加入控制了最大值,则要将比最大值大的数拆开,不是很好控制拆成那些数,拆的数的数量,所以考虑从大到小枚举最小值,同时控制最大值。

接下来考虑如何去控制最大值,如字面意思一般,我们希望让最大值尽量小,但是有不能在分解过程中产生比我们确定的最小值更小的值,单纯的用贪心似乎并不适合解决这个问题,所以我们考虑使用 dp。

本着求什么设什么的原则,我们设 \(f_{i,x}\) 表示满足能将 \(x\) 分解成多个数相乘且所有数都被包含在区间 \([i,v]\) 内的最小的 \(v\),在具体实现过程中状态中的第一维 \(i\) 可以压掉。接下来考虑转移,首先可以想到肯定是从大到小枚举 \(i\),对于每个 \(i\),任何一个 \(x\) 的分解只有几种可能,要么根本不能分出 \(i\),要么分出几个 \(i\),要么能分不分,分别考虑转移,前后两种转移都是直接继承上一次的答案,\(i\) 那维压掉后即不变,中间的转移考虑到一个数不一定只分出一个 \(i\),所以可以考虑使用类似多重背包的优化,正向枚举直接转移,\(f_x=\min\{f_x,f_\frac xi\}\)。

然后我们发现上面的转移过程中 \(f\) 数组随 \(i\) 变小是单调变小的,即最大值不会变大,我们就可以进行上面的双指针,对于每个集合中存在的 \(x\),标记 \(f_x\),然后用一个指针指向最后一个标记,标记位置单调前移,每次计算答案,代码实现难度不大。

标签:最小值,题解,最大值,Three,Grace,枚举,考虑,转移,指针
来源: https://www.cnblogs.com/LaoMang-no-blog/p/16457670.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有