栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

9714 圣诞礼物

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

9714 圣诞礼物

Description
圣诞节到了,圣诞老人给 N 个小朋友准备了 M 个礼物。每个小朋友有一个袜子(袜子不编号,无区别,
认为袜子都相同),
圣诞老人将 M 个礼物装到 N 个袜子中的放法有多少种?

注意:

1)若M=7 N=3,那么5,1,1的放法和1,5,1的放法算是同一种装法。

2)允许袜子为空。

3)M和N无大小关系,M可以比N大,M也可以比N小。
输入格式
输入数据包含两个整数 M,N。1<=M,N<=50。

M在前,N在后,中间空格。
 

输出格式
输出共有几种不同的放法。 
输入样例
7 3
输出样例
8
提示
这道题仅是“11088 整数划分的扩展问题”中的第(2)小题。

上课讲解了此题的两种解法.

解法一:按书上算法求"对正整数n进行划分,最大加数不超过m的划分个数",因为此题"对正整数n进行划分,不超过m项的划分个数"与之是相等的。

解法二:设d[i][j]表示i划分为j份,视为i个球放入j个盒子的方法数。盒子是无差别的。有如下递推关系:
(1)j个盒子有空的,d[i][j] = d[i][j-1],把某一空盒子拿出来放一边;
(2)j个盒子都不空,d[i][j] = d[i-j][j],每个盒子扣掉1个球;
(3)d[i][0]=0,i>=1; d[i][1]=1,i>=1; d[0][j]=1, j>=1
因此:d[i][j] = d[i][j-1] + d[i-j][j]。  n划分为m份的划分数为d[n][m]。

正如解法一,弄明白课本上的例题这题就很简单了

 

#include 

using namespace std;


int q(int n,int m){
    if((n<1)||(m<1)) return 0;
    if((n==1)||(m==1)) return 1;
    if(n>n>>m;//m个礼物分给n双袜子
    cout< 

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/316880.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号