CSDN 第十三次编程竞赛题解

第一题

CSDN 第十三次编程竞赛题解_第1张图片

for 循环遍历,选择 【陶陶身高+板凳高度】> 【苹果高度】的苹果

第二题

CSDN 第十三次编程竞赛题解_第2张图片

由于要组成[1, m]之间的所有数字,我们可以首先考虑无解的情况,即最小的硬币面值大于1,这样的话便不能组合出1 的情况。当最小硬币面值是1的时候则必定有解,因为最差m个1可以组合出[1, m]的所有情况。

这里我们可以考虑贪心的策略,考虑如下情况:假设硬币面值序列为【1,k(k>1)】;此时如果要组合出 [1, k-1] 的所有情况,我们只有一种方案,即选择 k-1 个 1,在组合 k 的时候,我们有两种选择:1)在加一个1;2)直接用k;第一种情况,用k个硬币组合出[1, k]的所有组合;第二种情况,用k个硬币(k-1个1和一个k)组合出了[1, 2k-1]的所有情况,很明显第二种选择更好。

所以我们的算法流程是:

  • 初始化可组合最大范围 sm = 0,所选硬币数 ans = 0, 硬币数组 coins
  • 从小到大枚举硬币的值,如果 sm < coins[i],sm += coins[i-1], ans++
  • 如果 sm >= m,返回 ans

第三题

CSDN 第十三次编程竞赛题解_第3张图片

判断给定时间的最大数是多少,假设最大数是 n,则这个表至少是 n+1 进制。不存在即按照最小的进制计算H和M,存在 H>23或者M>59;无数解即H和M存在一位数且满足H<=23和M<=59;剩下的则遍历[n+1, 60] 进制,计算对应的 H 和 M,到不符合条件为止,顺带计数

第四题

CSDN 第十三次编程竞赛题解_第4张图片

排列组合或者 dfs 枚举

你可能感兴趣的:(csdn比赛题解,算法)