竞赛
考级
算法思路详解 1. 问题分析: * 有三种单词组合方式:ac(1a+1c)ac(1a+1c)ac(1a+1c)、aa(2a)aa(2a)aa(2a)、wa(1w+1a)wa(1w+1a)wa(1w+1a) * 目标:最大化单词总数,同时最小化wa单词数量 * 需要合理分配字母到不同组合方式 2. 关键策略: * 枚举法:尝试所有可能的wa单词数量(0到z) * 贪心分配:对于每种wa数量,尽可能多地组合ac,然后用剩余a组合aa * 最优解选择:记录单词数最多且wa最少的方案 3. 变量说明: * i:当前尝试的wa单词数量 * rw:剩余的w数量(未被用于wa的w) * ra:剩余的a数量(未被用于wa的a) * ac:能组成的ac单词数量 * aa:能组成的aa单词数量 * sum:当前方案的总单词数 4. 时间复杂度: * 每组数据的时间复杂度是O(z)O(z)O(z),因为需要遍历0到z的所有可能 * 总时间复杂度是O(T∗z)O(T*z)O(T∗z),对于T≤105T≤10^5T≤105和z≤100z≤100z≤100是可接受的 5. 边界情况处理: * 当a不足时(ra < 0),跳过该情况 * 当所有字母都用完时,计算总单词数 * 当有多个方案单词数相同时,选择wa最少的 6. 为什么这个策略有效: * 通过枚举所有可能的wa数量,确保不会遗漏最优解 * 对于每种wa数量,采用贪心策略最大化ac和aa数量 * 最后选择单词数最多且wa最少的方案 这个算法巧妙地结合了枚举和贪心策略,确保在合理时间内找到最优解。对于字母组合类问题,这种先枚举限制条件再贪心分配的方法很常见。
飞的智动
T4 小午的构造 题目大意 有 a 、c 、w 三个字母若干个,有 ac 、wa 、aa 三种组合,求最多能得到多少组合,并且在得到最多组合的情况下,wa 的个数最少是多少? 解题思路 首先考虑组合出最多数量的单词:由于 c 和 w 只会被用于组成 ac 和 wa ,所有我们优先消耗 c 和 w ,最后剩下的 a 两两组合。 再来考虑如何让 wa 的个数尽量少: * 在消耗 c 和 w 的情况下,我们一定优先消耗 c ,再消耗 w ; * 当 w 被消耗完且 a 两两组合成 aa ,a 还有剩余时,我们可以将 wa 拆开,用其中的 a 去和剩余的 a 组合。 对于上述第二点,我们会发现最终如果有 a 剩余,那么一定只会剩下一个 a ,所有我们最后要拆 wa 时也只会拆一个,那么我们只需要判断组合完 ac 之后的 a 和 w 的奇偶性就可确定是否需要拆 wa 。 参考代码
NoonMaple
贴个毫无思维难度的神秘赛时做法。 注意到 x,y,z≤100x,y,z\le 100x,y,z≤100,所以所有 x,y,zx,y,zx,y,z 的情况不超过 2×1062\times 10^62×106。显然可以记忆化搜索。多测不要清空。 时间复杂度 O(V3)O(V^3)O(V3),其中 V=100V=100V=100。
复仇者_帅童
贴一个考场题解 题意 有 xxx 个 aaa、 yyy 个 ccc、 zzz 个 www, 可以组合ac、aa、waac、aa、waac、aa、wa,在获得最多单词的情况下,最少有多少个wawawa 思路 多用 ac、waac、waac、wa 都用了一个 aaa,所以可以多用 acacac ,少用 wawawa,最后如果剩一个 aaa,可以少用一个wawawa,多用一个 aaaaaa,时间复杂度 O(T)O(T)O(T) 代码 代码比较丑陋,凑合着看吧
Astrasilent
题意:有三种拆分方式 aa(a+a),wa(w+a),ac(a+c) ok 写上公式tm5分 那我就枚举wa有多少个,正好时间复杂度不会爆 没什么好讲得啦,就上代码(这题我提交了25次)
咕咕咕
提交答案之后,这里将显示提交结果~