放苹果
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 25952   Accepted: 16509

Description

把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。

Input

第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。

Output

对输入的每组数据M和N,用一行输出相应的K。

Sample Input

1
7 3

Sample Output

8

Source

lwx@POJ

将n个相同的小球放入m个相同的盒子,问有多少种方法。

解析:有些题目可以转化为这样的题目,比如有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];elsea[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个相同盒子)相关推荐

  1. POJ 1664 把苹果

     把苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25785   Accepted: 16403 Descript ...

  2. poj 1664 放苹果 DPDFS

    点击打开链接 把 M个同样的苹果放在 N个同样的盘子里,允许有的盘子空着不放 问共有多少种方法?5,1,1和1,5,1是同一种方法 解法一: poj 1664 放苹果 DP dp[i][j]表示共 i ...

  3. poj 1664 放苹果【M的N划分】

                                                   放苹果 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不 ...

  4. POJ 1664 /NYOJ 758 放苹果问题(递归)

    分苹果 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 2 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法? (注意:假如有3个盘子 ...

  5. POJ 1164 放苹果 经典的组合问题

    Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t(0 ...

  6. poj1664(放苹果)

    题目链接:http://poj.org/problem?id=1664 关于放苹果的那些事.......... 今天偶然看到一个关于整数划分的算法, 仔细看了后,我想到了放苹果的事,其实这个问题困扰了 ...

  7. poj1664:放苹果问题(递归)

    poj1664:放苹果:http://poj.org/problem?id=1664 咱们设苹果的个数为m个,盘子的个数为n个. 第一种情况: 如果苹果只有一个或者零个,即m=1或m=0,此时只有一种 ...

  8. 43.放苹果(递归练习)

    放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分 ...

  9. POJ-1664 放苹果

    放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21021   Accepted: 13395 Description ...

最新文章

  1. 快速排序(抽象理解,最快了解)
  2. Python 爬虫使用pyppeteer 网页进行向下翻页操作
  3. 时间序列数据库选型——本质是列存储,B-tree索引,抑或是搜索引擎中的倒排索引...
  4. 多目标跟踪笔记二:Efficient Algorithms for Finding the K Best Paths Through a Trellis
  5. 数字图像的加载、显示和输出
  6. Java 程序执行过程的内存流程图(手写稿)
  7. python的if语句例句_Python入门之if条件语句
  8. UVALive 7455 Linear Ecosystem (高斯消元)
  9. sqlserver有外键无法创建触发器_数据库不使用外键的 9 个理由
  10. VC中树状控件(TreeCtrl)的用法
  11. SQL Server 数据库中的 MD5 和 SHA1
  12. http响应返回的状态码
  13. java中一个数轮流除去所有数_Java实现A、B两人轮流从盒中取球,取出球的数目必须是:1,3,7或者8个...
  14. POJ 1753 Flip Game 简单BFS
  15. 自定义RecyclerView.ItemDecoration,实现RecyclerView的分割线效果
  16. SqlSessionFactoryBean
  17. ai人工智能电子计算机星际穿越,以智慧AI为眸,华为nova5系列带你来一场“星际穿越”...
  18. 我有阳光(我爱生活)
  19. SpringBoot集成RabbitMQ实现消息重试机制,消息重试3次失败后写入死信队列,消息重试3次失败后入库
  20. android 保存图片(视频)到相册

热门文章

  1. 51小车测速及OLED显示速度
  2. 电路板上电源和地短路,电压一定会被拉到0v吗?
  3. 页面滚动到某一位置吸顶_前端吸顶功能,滚动到一定位置时固定到顶部
  4. 转 李兴华老师的一篇博客
  5. LayUI数据表格自动定时刷新,并且停留在当前页面
  6. 安利几个追剧软件给你
  7. 数据库获取当前服务器时间
  8. 【每日一看】数据分析面试题归纳整理总结
  9. 【ZJOI2014】【BZOJ3527】 力 (FFT)
  10. 排序算法分析:冒泡排序、选择排序、插入排序、希尔排序、快速排序