[ACM] POJ 1664 放苹果(n个相同小球放入m个相同盒子)
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 25952 | Accepted: 16509 |
Description
Input
Output
Sample Input
1 7 3
Sample Output
8
Source
将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个相同盒子)相关推荐
- POJ 1664 把苹果
把苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25785 Accepted: 16403 Descript ...
- poj 1664 放苹果 DPDFS
点击打开链接 把 M个同样的苹果放在 N个同样的盘子里,允许有的盘子空着不放 问共有多少种方法?5,1,1和1,5,1是同一种方法 解法一: poj 1664 放苹果 DP dp[i][j]表示共 i ...
- poj 1664 放苹果【M的N划分】
放苹果 Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不 ...
- POJ 1664 /NYOJ 758 放苹果问题(递归)
分苹果 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 2 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法? (注意:假如有3个盘子 ...
- POJ 1164 放苹果 经典的组合问题
Description 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法. Input 第一行是测试数据的数目t(0 ...
- poj1664(放苹果)
题目链接:http://poj.org/problem?id=1664 关于放苹果的那些事.......... 今天偶然看到一个关于整数划分的算法, 仔细看了后,我想到了放苹果的事,其实这个问题困扰了 ...
- poj1664:放苹果问题(递归)
poj1664:放苹果:http://poj.org/problem?id=1664 咱们设苹果的个数为m个,盘子的个数为n个. 第一种情况: 如果苹果只有一个或者零个,即m=1或m=0,此时只有一种 ...
- 43.放苹果(递归练习)
放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分 ...
- POJ-1664 放苹果
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21021 Accepted: 13395 Description ...
最新文章
- 快速排序(抽象理解,最快了解)
- Python 爬虫使用pyppeteer 网页进行向下翻页操作
- 时间序列数据库选型——本质是列存储,B-tree索引,抑或是搜索引擎中的倒排索引...
- 多目标跟踪笔记二:Efficient Algorithms for Finding the K Best Paths Through a Trellis
- 数字图像的加载、显示和输出
- Java 程序执行过程的内存流程图(手写稿)
- python的if语句例句_Python入门之if条件语句
- UVALive 7455	Linear Ecosystem (高斯消元)
- sqlserver有外键无法创建触发器_数据库不使用外键的 9 个理由
- VC中树状控件(TreeCtrl)的用法
- SQL Server 数据库中的 MD5 和 SHA1
- http响应返回的状态码
- java中一个数轮流除去所有数_Java实现A、B两人轮流从盒中取球,取出球的数目必须是:1,3,7或者8个...
- POJ 1753 Flip Game 简单BFS
- 自定义RecyclerView.ItemDecoration,实现RecyclerView的分割线效果
- SqlSessionFactoryBean
- ai人工智能电子计算机星际穿越,以智慧AI为眸,华为nova5系列带你来一场“星际穿越”...
- 我有阳光(我爱生活)
- SpringBoot集成RabbitMQ实现消息重试机制,消息重试3次失败后写入死信队列,消息重试3次失败后入库
- android 保存图片(视频)到相册