m个苹果放入n个篮子
题目 :X个相同的苹果放入Y个篮子,
(1)篮子可以为空 ,篮子不同。 放法有C(X+Y-1,Y-1 );//
(2)篮子不可以为空,篮子不同.放法有C(X-1,Y-1) //插挡板法
分析有了这个组合公式,参考我的 求组合数程序即可解决问题。
(3)篮子可以为空,篮子相同。按上面程序求解 递推公式dp[i][j]=dp[j-i][i]+dp[j][i-1]
#if 0
/*
m个相同的苹果放入n个相同的篮子,篮子可以为空。
下面两种方法求解,动态规划和递归。但都须知:
dp[0][j]=0;含义为:j(j>0)个苹果放入0个篮子,没有地方放,放法为0.
dp[i][0]=1;0个苹果放入i个篮子,每个篮子都为空,放法为1.
dp[0][0]=1;当然,0个苹果放到0个篮子放法为1.即0!=1;
还有 dp[i][j],i>j时,即篮子数大于苹果数是dp[i][j]=dp[j][j],含义为 把2个苹果放到5个篮子的放法和把2个苹果放到2个篮子放法数相同。
*/
int dp[][];//全局,默认初始化为0
int n,m;
int main()
{ m=;n=;
int i,j;
//全局变量默认初始化为0可以无需初始化了。 // for (j=0;j<m;j++)//苹果 // {
// dp[0][j]=0;
// }
//可以再拆分,也无需初始化。
// for (i=0;i<n;i++)//篮子
// {
// dp[i][0]=1;
// }
dp[][] = ; for(i = ; i <= n; ++i)//篮子
for( j =; j <= m; ++j)//苹果
{
if(j>=i)
{
dp[i][j] = dp[i][j-i] + dp[i-][j];
cout<<"dp["<<i<<"]["<<j<<"] = dp["<<i<<"]["<<j-i<<"] + dp["<<i-<<"]["<<j<<"]";
cout<<":"<<dp[i][j]<<" = "<<dp[i][j-i]<<" + "<<dp[i-][j];
}
else
{
dp[i][j] = dp[j][j];
cout<<"dp["<<i<<"]["<<j<<"] = dp["<<j<<"]["<<j<<"]";
cout<<":"<<dp[i][j]<<" = "<<dp[j][j];
}
cout<<endl; }
cout<<dp[n][m]<<endl;
//}
return ;
}
#endif //递归求解
#if 0
int fun(int n,int m)
{
if (n==0&&m!=0)//篮子为空
return 0;
else if (m==0)
{
return 1;
}
else if (m>=n)
{
return fun(n,m-n)+fun(n-1,m);
}
else
return fun(m,m);
}
int main()
{
int n=,m=; cout<<fun(n,m)<<endl;
}
#endif
测试数据: 3 7 count=8
3 5 count=5

(4)篮子不可以为空,篮子相同。没有递推公式:但是dp[X][Y]=dp[X-Y][Y], 计算dp[X-Y][Y]可以用(3)中递推公式。
下面求解(4)的情况
//篮子不可以为空,即m>=n;
int count=;
int fun(int n,int m)
{
if (n==&&m!=)//篮子为空
count=;
else if (m==)
{
count=;
}
else if (m>=n)
{
count=fun(n,m-n)+fun(n-,m);
}
else
count=fun(m,m); return count;
} int main()
{
int n=,m=;
fun(n,m-n);
cout<<count<<endl;
}
//测试数据: 3,5 count=2;
3,7 count=4;
数学模型为正整数的分拆
详见组合数学书第二章
1、C(n,r) 从n个不同的球中取出r个,放进r个相同的 盒子中,不许空盒,有多少种放法.
2、P(n,r) 从n个不同的球中取出r个,放进r个不相同 的盒子中,不许空盒,有多少种放法.
3、 r个相同的球放进n个不同的盒子中,允许 空盒,有多少种放法. 正整数的有序拆分
4 、n个无区别 的球放进r个无区别的盒子,允许空盒。正整数的无序拆分.
书上公式:
n拆分为m个无序的数:
1 m=1或n=1
Q(n,m)= Q(n,n) m>n
1+Q(n,n-1) m=n
Q(n,m-1)+Q(n-m,m)
m个苹果放入n个篮子的更多相关文章
- 将m个苹果放入n个盘子的问题【转】
来自:http://blog.csdn.net/qq675927952/article/details/6312255 问题1: m----->相同, n---> 相同,可为空 将m个苹果 ...
- m个苹果放入n个盘子问题
这个问题,看似是一个简单的排列组合问题,但是加上不同的限制条件,会演变成不同的问题,感觉很奇妙,就总结一下列举下来 问题一 问题描述:把m个同样的苹果放在n个同样的盘子里,允许有的盘子空着不放,问有多 ...
- Rshare Pro是否可以放入至客户企业App Store?
现在很多客户内部部署了苹果授权的企业内部的AppStore,我们的Rshare Pro 是完全允许放入企业搭建的AppStore平台中.但每份需要收费20美元,换成人民币是120元.
- m个相同苹果放的n个相同盘子中的算法
m个相同的苹果,放在n个相同的盘子中,由于相同,使用排列组合的方法不好处理.这个问题困扰了我很久 最后由大神“或缺”给出了答案: 以8个苹果放在3个盘子中为例 思路: 8苹果3盘子 =8苹果2盘子+5 ...
- EC笔记:第三部分:17、使用独立的语句将newed对象放入智能指针
一般的智能指针都是通过一个普通指针来初始化,所以很容易写出以下的代码: #include <iostream> using namespace std; int func1(){ //返回 ...
- tuple放入dict中
tuple放入dict中是否可以正常运行 # 将tuple放入dict中 a = ('AI','Kobe','Yao') b = ('AI',['Kobe','Yao']) dict1 = {'a': ...
- ios-将代码创建的视图控件放入拖拽控件的下面
如图所示 图片是拖拽上去的imageView,橘黄色控件是在代码中创建的添加上去的,此时黄色view在imageView 上方 调用方法bringSubviewToFront:试图将imageView ...
- java通过文件路径读取该路径下的所有文件并将其放入list中
java通过文件路径读取该路径下的所有文件并将其放入list中 java中可以通过递归的方式获取指定路径下的所有文件并将其放入List集合中.假设指定路径为path,目标集合为fileList,遍 ...
- 将DLL放入到资源中,运行时自动加载
今天在看到 一个小软件,考勤用的 AttendanceSheet_V_1_2,只有一个EXE文件,绿色的随便考到哪里都可以运行. 顺手反编译后发现,他将需要的DLL也放入到资源文件了,在启动的时候自动 ...
随机推荐
- Linux Shell的 & 、&& 、 ||
Linux Shell的 & .&& . || 收藏 hanzhankang 发表于 3年前 阅读 18472 收藏 20 点赞 4 评论 0 开程序员的淘宝店!寻找开源技术服 ...
- C# js 在页面能执行,放在单独js文件不能执行
我们先来看看MVC中生成的 注意:url.Content 生成的路径 Html.ActionLink 与 Url.Action 1.两者者是根据给定的Controller,Action 生成链接, 但 ...
- linux中find命令
1.使用name选项: 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用. 可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来. 不管当前路径是什么,如果 ...
- java中获取文件目录
1. web项目得到部署的目录路径(最后包含"/"或"\"): xxx(HttpServletRequest request) { String strDirP ...
- /文件和目录权限chmod /更改所有者和所属组chown/umask/隐藏权限lsattr/chattr
2.14 文件和目录权限chmod 2.15 更改所有者和所属组chown2.16 umask2.17 隐藏权限lsattr/chattr 文件和目录权限chmod 文件权限: r 4 ...
- Write operations are not allowed in read-only mode 只读模式下(FlushMode.NEVER/MANUAL)写操作不允
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read ...
- 使用spring initialization创建SpringBoot项目
https://blog.csdn.net/liutong123987/article/details/79385513 有很多方法可以快速创建Springboot项目,可以通过idea的spring ...
- WebXml.com.cn 中国股票行情数据 WEB 服务(支持深圳和上海股市的全部基金、债券和股票),数据即时更新
http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx
- phpcms首页如加上用户登录的信息?
请看效果图 我用的是cookie的方法,请先打开discuz的文件 \source\function\function_member.php 找到函数function setloginstatus() ...
- symfony分页实现方法
1.symfony分页是要用到组件的,所以这里使用KnpPaginatorBundle实现翻页 2. 用composer下载 在命令行中: composer require "knplab ...