12届蓝桥杯12月模拟赛rgb题解

博客主要解析12届蓝桥杯模拟赛的一道关于RGB小球排列的问题,要求排列形成的序列严格单调递增。通过DFS算法进行求解,并提供了剪枝策略,包括避免同色球相邻和每次递增选择小球数量。给出了部分样例输入和输出,以及数据规模和约定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

问题描述
  小蓝有黄绿蓝三种颜色的小球,分别为 R, G, B 个。同样颜色的小球没有区别。
  小蓝将这些小球从左到右排成一排,排完后,将最左边的连续同色小球个数记为 t_1,
将接下来的连续小球个数记为 t_2,以此类推直到最右边的小球。
  请问,总共有多少种摆放小球的方案,使得 t_1, t_2, … 为严格单调递增序列,即 t_1 < t_2 < t_3 < …
输入格式
  输入一行包含三个整数 R, G, B。
输出格式
  输出一个整数,表示答案。
样例输入
3 6 0
样例输出
3
样例说明
  用 r 表示红球,g 表示绿球,可能的方案包括:
  rrrgggggg 036
  grrrggggg 135
  ggrrrgggg 234
样例输入
2 4 6
样例输出
3
样例说明
  用 r 表示红球,g 表示绿球,b 表示蓝球,可能的方案包括:
  rrggggbbbbbb
  grrgggbbbbbb
  brrggggbbbbb
数据规模和约定
对于30%的评测用例,1 <= R, G, B <= 10;
  对于60%的评测用例,1 <= R, G, B <= 30;
  对于所有评测用例,1 <= R, G, B <= 50。

参考思路:

1.初步看题可知为枚举各种颜色小球的数量,来实现递增序列,故确定思路为dfs.
2.我们应该如何枚举小球呢?可以利用递增条件,记录上一次枚举的数量,下一次枚举需要大于这个数量。dfs(sum,x,last)表示在sum个球中,前面选了颜色为last色的,x个球。接着再选j个颜色为i的,那么剩下的球的选法和整体的选法相同,为dfs(sum-j,i,j)
3.递归边界为三数字的累加。剪枝一为:last表示,这个选的小球和上次选的小球相同,则跳过。剪枝二为每次枚举递增数量的小球。

#
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值