蓝桥杯 算法提高 矮人砍树(递归优化组合数)

题目:
 矮人们所生活的地区有 N 棵树。有趣的是,这 N 棵树排成了一条直线。现在,矮人们为了建造一个新的小屋,决定砍掉 K 棵树来获取木材。但是,矮人们希望对于任意两棵相邻的树,至少要保留一棵。矮人们想知道,他们有多少种不同的砍树方案。由于方案数可能很大,你只需要输出方案数除以 10007 的余数。


思路:
1.算法名称:递归。(由题目易得,插空问题答案为C(k,N-k+1),用递归优化组合数节省时间)
2.参变量意义:dp[x][y]表示x棵树中砍y棵树一共有多少种情况。
3.具体分析:假设此时有x棵树,分类讨论。
(1)若第x棵树砍了,则第x-1棵树不能砍,等价于前x-2棵树中砍了y-1棵,此时有dp[x-2][y-1]种情况。
(2)若第x棵树没砍,该条件下,x棵树中砍了y棵等价于x-1棵树中砍了y棵,此时有dp[x-1][y]种情况。
综上,dp[x][y]=dp[x-2][y-1]+dp[x-1][y]


代码展示:

03c11d6745d847dfb1965d0a3ea3d09c.png

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值