[ACM] POJ 1664 放苹果(n个相同小球放入m个相同盒子)
来源:互联网 发布:理光软件研究所待遇 编辑:程序博客网 时间:2024/05/22 16:39
Description
Input
Output
Sample Input
17 3
Sample Output
8
Source
解析:有些题目可以转化为这样的题目,比如有n个相同的小球,m个相同的盒子,要求每个盒子里面至少有k个小球,问一共有多少种方法:http://blog.csdn.net/duanxian0621/article/details/7864791 方法为:预先在每个盒子里面已经放好k个小球,那么还剩下n-k*m 个小球,然后就转化为了,把n-k*m个相同的小球放入m个相同的盒子里面,有多少种方法。
分情况讨论:a[i][j]表示i个小球放入j个盒子的方法数
① 当放入小球后,球数最少的盒子为空,那么就相当于,把i个小球放入j-1个盒子里面,即a[i][j-1]。
② 当放入小球后,球数最少的盒子不为空,那么说明每个盒子里面都至少有一个小球,那么就预先把每个盒子里面放入一个小球好了,有 a[i-j] [j]。
所以 ,递推公式为 a[i][j]= a[i][j-1]+a[i-j][j],这里是i>=j的。
当i<j的时候,无论怎么放,肯定会存在空盒,不妨先拿走一个空盒(保证有空盒),然后把i个相同的小球放入剩余的j-1个相同的盒子中,有a[i][j-1]种方法,所以a[i][j]=a[i][j-1].
综上:将n个相同的小球放入m个相同的盒子有
当i>=j时,a[i][j]=a[i][j-1]+a[i-j][j];
当i<时,a[i][j]=a[i][j-1],(仔细想想,这里也可以写成a[i][j]=a[i][i],因为a[i][i]=a[i][i+1]=a[i][i+2]=a[i][i+3]……..
初始化a数组代码为:
int a[maxn][maxn];
void prepare()
{
for (int i=0;i<m;i++)
a[i][1]=a[0][i]=1;
for (int i=1;i<maxn;i++)
for (int j=2;j<maxn;j++)
if (j<=i)
a[i][j]=(a[i-j][j]+a[i][j-1])%MOD;
else
a[i][j]=a[i][i]; //其实是a[i][j-1],不过和a[i][i]是一样的。
}
代码:
#include <iostream>using namespace std;const int maxn=11;int a[maxn][maxn];void init(){ for(int i=1;i<=10;i++) a[0][i]=1,a[i][1]=1; for(int i=1;i<maxn;i++) for(int j=2;j<=maxn;j++) if(j<=i) a[i][j]=a[i][j-1]+a[i-j][j]; else a[i][j]=a[i][i];}int main(){ init(); int t,n,m; cin>>t; while(t--) { cin>>n>>m; cout<<a[n][m]<<endl; } return 0;}
- [ACM] POJ 1664 放苹果(n个相同小球放入m个相同盒子)
- 将n个相同小球放入m个不同盒子内的放法种数
- m个苹果分在n个相同的盒子
- N个小球放M个盒子
- m 个相同的球放入n 个相同的盒子里
- POJ 1664 放苹果(m个苹果放入n个盘子
- poj 1664 放苹果 将m个相同的苹果放进n个相同的盘子中,盘子允许空,有多少种方法
- 转:poj 1664 放苹果 将m个相同的苹果放进n个相同的盘子中,盘子允许空,有多少种方法
- m个相同苹果放的n个相同盘子中的算法
- 给你m个东西,放在n个相同的盒子中(相同,即不计顺序),每个盒子可以放任意多,问有多少种放法
- 关于N个小球放M个盒子解答
- POJ 1664 求m个苹果放入n个盘子的不同放法数目 递归 分类讨论
- [ACM] FZU 1570 集合划分问题( 不同小球放入相同盒子,第二类Stirling数)
- (11)分苹果问题:将m个相同的苹果放到n个相同的盘子中,多少钟分法?
- 将m个相同的球全部放到n个相同的盒子里面有几种放法
- C/C++编程题1-放苹果,将m个相同的苹果放进n个相同的盘子中,盘子允许空,有多少种方法
- m个苹果放入n个盘子
- m个苹果放入n个盘子
- MYSQL入门学习之二十九:MySQL访问控制实现原理
- 辛星解读PHP中设置正确的时区
- 开源是如何让Android成为移动市场大佬的?
- Spring4的学习(二)之AOP编程
- 陈诚-大数据和“读图时代”的图片营销
- [ACM] POJ 1664 放苹果(n个相同小球放入m个相同盒子)
- 用汇编的眼光看C++(之指针)
- f 4 c u b e s p i debug diary
- 输入一个数组长度,动态创建数组,所有元素随机生成,输出元素中的最大值
- 10个常见的缓存使用误区
- Spring+Quartz tomcat集群
- MYSQL入门学习之三十:MySQL锁定机制简介
- linux里所有关于时间的函数整理
- 创建第一个安卓应用APP (小结)