彭彭的礼品店

问题描述:

      彭彭是个既漂亮又心肠好的女孩,她经营了一家礼品店,新年快来了,她想给她认识的所有小朋友们(很多很多)送些精美的小礼物,她的店中现在有K种一样大小的礼物,当然每种礼品的数量足够多,她还有一些礼品盒子,每个盒子均能盛放N个礼物。

      彭彭想给每个小朋友不同的惊喜,因此她不允许任何两个盒子的礼品组合是相同的,但考虑到一些小朋友(如敏敏,佳芳等人)的特殊喜好,有些礼品必须在礼品盒中出现且要达到一定的数量,而另外一些淘气的小朋友,如明明,铁伟,总是喜欢礼品盒装的慢慢的,可是彭彭不想为这些有着特殊需求的小朋友单独准备礼品盒,因为礼品盒一旦被封装,她就无法分清楚那个盒子究竟应该送给谁。可是彭彭很聪明,经过一个晚上的努力思考,她终于想到了一个好办法,那就是让每个礼品盒都满足这些特殊的需求,这样她就可以把任意的盒子送给任意的小朋友了。彭彭在为自己聪明的脑袋感到骄傲的同时,又想知道她最多可以给多少个小朋友送礼物,这可难坏了她,那么现在就请你试试吧!

输入:

      对每组输入第一行先给出K(1≤K≤50)表示礼品的种类,N(1≤N≤40)表示礼品盒的最大容量;接着第二行给K个数a[k],分别表示对于第K个物品至少应放a[k]个(0≤a[k])。

输入以“0 0”结束。

输出:

      最多可送出的礼物盒数量,占一行。

input

      4 20

      3 1 0 5

      0 0

output

      364

 

思路:

第i个物品至少a[i]个,也就是说,除了a数组的和sum[a],还需要找n-sum[a]个物品;

则将这些物品用1 表示,

有几种物品,就用几个0 分开

则就成了n-sum[a]+k-1个字符01字符串。

 

#include <stdio.h>
#include <iostream>
#include <iomanip>
using namespace std;
double cal(int n,int r)
{
	int ret=1;
	if(r>n/2)
	r=n-r;
	for(int i=1;i<=r;i++,n--)
	{
		ret=n*ret/i;
	}
	return ret;
}
int main()
{
	int n,m;
	while(cin>>n>>m&&n&&m)
	{
		int a;
		for(int i=0;i<n;i++)
		{
			cin>>a;
			m-=a;
		}
		printf("%0.lf\n",cal(m-1+n,m));
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值