
获得徽章 0
#刷题交流# 打卡、寻找最大葫芦
解题过程
统计牌面值数量:使用 Counter 统计每种牌面值的数量。
遍历所有可能的牌面值组合:通过双层循环遍历所有可能的牌面值组合 (x,y),其中 x 代表三张相同牌面值的牌,y 代表两张相同牌面值的牌。
检查条件:对于每个组合 (x,y),检查是否满足以下条件:
x×3+y×2≤max:五张牌的牌面值之和不超过最大值 max。
c[x]≥3:牌面值为 x 的牌数量至少为 3。
c[y]≥2:牌面值为 y 的牌数量至少为 2。
x=y:三张相同牌面值的牌和两张相同牌面值的牌不能相同。
返回结果:如果找到符合条件的组合,返回 [x,y];否则返回 [0,0]。
解题过程
统计牌面值数量:使用 Counter 统计每种牌面值的数量。
遍历所有可能的牌面值组合:通过双层循环遍历所有可能的牌面值组合 (x,y),其中 x 代表三张相同牌面值的牌,y 代表两张相同牌面值的牌。
检查条件:对于每个组合 (x,y),检查是否满足以下条件:
x×3+y×2≤max:五张牌的牌面值之和不超过最大值 max。
c[x]≥3:牌面值为 x 的牌数量至少为 3。
c[y]≥2:牌面值为 y 的牌数量至少为 2。
x=y:三张相同牌面值的牌和两张相同牌面值的牌不能相同。
返回结果:如果找到符合条件的组合,返回 [x,y];否则返回 [0,0]。
展开
评论
点赞
#刷题交流# 打卡、数字分组求偶书和:
一道典型的组合问题,可以定义两个状态:f[0] 表示当前选择的数字之和为偶数的方案数,f[1] 表示当前选择的数字之和为奇数的方案数。对于每个数字组,我们统计其中奇数和偶数的个数,然后更新这两个状态。最终,f[0] 就是我们需要的答案。
初始化状态:
初始时,f[0] 表示当前选择的数字之和为偶数的方案数,初始值为1(即空集的情况)。
f[1] 表示当前选择的数字之和为奇数的方案数,初始值为0。
遍历每个数字组:
对于每个数字组,统计其中奇数和偶数的个数,分别记为 c[0] 和 c[1]。
更新状态:
更新 f[0] 为 f[0] * c[0] + f[1] * c[1],即当前选择的数字之和为偶数的方案数。
更新 f[1] 为 f[0] * c[1] + f[1] * c[0],即当前选择的数字之和为奇数的方案数。
返回结果:
最终,f[0] 即为所求的符合条件的方案数。
一道典型的组合问题,可以定义两个状态:f[0] 表示当前选择的数字之和为偶数的方案数,f[1] 表示当前选择的数字之和为奇数的方案数。对于每个数字组,我们统计其中奇数和偶数的个数,然后更新这两个状态。最终,f[0] 就是我们需要的答案。
初始化状态:
初始时,f[0] 表示当前选择的数字之和为偶数的方案数,初始值为1(即空集的情况)。
f[1] 表示当前选择的数字之和为奇数的方案数,初始值为0。
遍历每个数字组:
对于每个数字组,统计其中奇数和偶数的个数,分别记为 c[0] 和 c[1]。
更新状态:
更新 f[0] 为 f[0] * c[0] + f[1] * c[1],即当前选择的数字之和为偶数的方案数。
更新 f[1] 为 f[0] * c[1] + f[1] * c[0],即当前选择的数字之和为奇数的方案数。
返回结果:
最终,f[0] 即为所求的符合条件的方案数。
展开
评论
1
赞了这篇文章