n个小球放入m个盒子中_没有排列组合放不好的小球!!!

题目

9284:盒子与小球之二

总时间限制: 10000ms 单个测试点时间限制:1000ms 内存限制:131072kB

描述

N个有差别的盒子(1<=N<=20)。你有A个红球和B个蓝球。0 <= A <= 15, 0 <= B <= 15。球除了颜色没有任何区别。你可以将球放进盒子。一个盒子可以同时放进两种球,也可以只放一种,也可以空着。球不必全部放入盒子中。编程计算有多少种放置球的方法。

输入

就一行,N,A,B,用空格分开

输出

就一行,输出放置方案总数

样例输入

2 1 1

样例输出

9

题目分析

本题一看上去就是典型的排列组合题目,于是我就试图写出该题目的核心公式,伴随着悦耳的键盘声,我的代码轻轻松松写好了!运行案例,bingo!提交代码,错误!没关系,一定是考虑不周,重新审视,哈哈,没关系,我重新做就是了(还生活以微笑!!!)。

挠着我日渐稀疏的头发,想着动态规划分小球,“思路清晰”的我打开了百度,搜索原题,小傻瓜,被我找到了吧,也并不复杂,先改成C语言,慢慢看,Em...,看不懂呢。

不不不,没有我排列组合放不了的小球,再想,成功!!!

数据结构

不需要不需要,int,long long玩遍排列组合!!!

代码及算法说明

排列组合失败版:

3217fb78dfdc2c4122dfa4a78ed4fb87.png

该代码中的排列组合公式(N+1)A+B/A!*B!由于个人的失误,少考虑了同色小球放在同一盘中情况的处理,导致提交错误,经过思考,认为该公式无法改进,因此放弃。

动态规划百度版:

6497c9eaee892689ed068990ec6e3d1b.png

当放弃了排列组合后,我毫不犹豫地打开了百度搜索,动态规划不是我的水平所及,找到了该代码,说是隔板法,经过研读,并没有明白,毫无收获,也不对,我收获了重拾排列组合的信心,于是有了下面的代码。

排列组合辗压版:

4fe98e7fe79af67ee3be481632841b85.png

看着晚自习的教室,内心喜悦万千,再痛苦挣扎了两个任务后,终于迎来了我的春天,这次的任务轻松结束,没有让我目及凌晨两点的信大,摸着我仅有的头发,开心的笑了。

算法分析

1. 本代码简洁明了,能省则省。

2. 运行时间稍长,没发现什么好的改进方法,可能是调用C时,第二个参数的选择问题,如果都选择N,可能会节省一点时间。

3. 数学推导在先,简化算法内容,实现相同功能。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值