bzoj3028: 食物 组合数学+生成函数

本文介绍了生成函数的基本概念及应用,通过实例讲解了如何利用生成函数解决组合问题,并给出了一段C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应ljm之邀请学习生成函数,看资料总说f(x)=1+x+x^2+……=1/(1-x),也没说为什么,问了数学老师才知道:

 f(x)=1+x+x^2+……

x f(x)= x+x^2+……

所以:f(x)- xf(x)= 1;f(x)=1/(1-x);

首先列出所有食物的母函数

汉堡:1+x^2+x^4+.....=1/(1-x^2)

可乐:1+x

鸡腿:1+x+x^2

蜜桃多:x+x^3+x^5+.....=x/(1-x^2)

鸡块:1+x^4+x^8+....=1/(1-x^4)

包子:1+x+x^2+x^3

土豆:1+x

面包:1+x^3+x^6+...=1/(1-x^3)

母函数有一个很有用的用处:把所有食物的母函数相乘后,x^n项的系数就是答案

整理后得:F(x)=x/(1-x)^4

又经过一系列的学习和资料,终于似是而非的好像明白了下面的结论:

https://wenku.baidu.com/view/4ccc7e69f342336c1eb91a37f111f18583d00caf###



所求的第k项:1/(1-x)^4的第k-1项,是c(n+k-1-1,n-1),本题中n=4,所以答案是:c(k+2,3)

代码没写,抄的popopqq的

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 510
#define MOD 10007
using namespace std;
int n;
char s[M];
int main()
{
	int i;
	scanf("%s",s+1);
	for(i=1;s[i];i++)
		(n=(n<<1)+(n<<3)+(s[i]-'0'))%=MOD;
	cout<<(n*(n+1)%MOD*(n+2)%MOD*1668%MOD)<<endl;
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值