9714 圣诞礼物

阅读: 评论:0

9714 圣诞礼物

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 <iostream>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<m) return q(n,n);if(n==m) return 1+q(n,m-1);return q(n,m-1)+q(n-m,m);
}int main()
{int n=0,m=0,ans=0;cin>>n>>m;//m个礼物分给n双袜子cout<<q(n,m);return 0;

 

 

 

 

本文发布于:2024-02-03 05:58:41,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170691112149105.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:圣诞礼物
标签:圣诞   礼物
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23