博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ 3028]食物(生成函数)
阅读量:6435 次
发布时间:2019-06-23

本文共 1183 字,大约阅读时间需要 3 分钟。

Description

明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!
我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西。理所当然的,你当然要帮他计算携带N件物品的方案数。
他这次又准备带一些受欢迎的食物,如:蜜桃多啦,鸡块啦,承德汉堡等等
当然,他又有一些稀奇古怪的限制:
每种食物的限制如下:
  承德汉堡:偶数个
  可乐:0个或1个
  鸡腿:0个,1个或2个
  蜜桃多:奇数个
  鸡块:4的倍数个
  包子:0个,1个,2个或3个
  土豆片炒肉:不超过一个。
  面包:3的倍数个
注意,这里我们懒得考虑明明对于带的食物该怎么搭配着吃,也认为每种食物都是以‘个’为单位(反正是幻想嘛),只要总数加起来是N就算一种方案。因此,对于给出的N,你需要计算出方案数,并对10007取模。
Solution
1<=n<=10^500 所以看起来就是要推柿子了
( )
 
把一堆生成函数的闭形式乘起来可以得到 x/(1-x)
即 x*(1+x+x
2+x
3+x
4...)
4
 

但是“不定方程的非负整数解的个数”是我一点也不熟悉的问题= =

于是我找到了这个:

嗯!然后就得到了:这个柿子n次项的系数就是C(3,n+3),因为还乘了一个x所以我们把它平移一位变成了C(3,n+2)

所以说答案就是(n+2)(n+1)n/6

#include
#include
#include
#define Mod 10007using namespace std;int read(){ int x=0;char c=getchar(); while(c<'0'||c>'9')c=getchar(); while(c>='0'&&c<='9'){x=(x*10+c-'0')%Mod;c=getchar();} return x;}void exgcd(int a,int b,int &x,int &y,int &d){ if(!b){d=a,x=1,y=0;return;} exgcd(b,a%b,y,x,d);y-=x*(a/b);}int inv(int a,int p){ int d,x,y;exgcd(a,p,x,y,d); return (x+p)%p;}int main(){ int n=read(); printf("%d\n",((((n+2)*(n+1))%Mod*n)%Mod*inv(6,Mod))%Mod); return 0;}

转载于:https://www.cnblogs.com/Zars19/p/6972487.html

你可能感兴趣的文章
7月末周网络安全报告:发现放马站点增至204个
查看>>
解决deepin-scrot在gnome3截图顶部出现黑边问题
查看>>
c语言printf输出列宽度的控制
查看>>
数组的最大距离 Maximum Distance in Arrays
查看>>
mydumper安装
查看>>
CentOS Linux 6.4 配置Samba简明指南
查看>>
【转载】网络编程中 Nagle 算法和 Delayed ACK 的测试
查看>>
isKindOfClass和isMemberOfClass的区别
查看>>
android如何用程序实现启用gprs或者3g网络
查看>>
全栈技能之自学sketch指南
查看>>
说说Web服务器的搭建
查看>>
Latex
查看>>
M2 四核单板计算机 仍有少量库存
查看>>
「ThinkPHP开发者周刊」第1期——创刊号
查看>>
Golang 性能忽然增加变慢10倍的现象,推测是编译器在spilt stack,导致的问题
查看>>
Nginx之初体验
查看>>
tomcat参数配置说明
查看>>
Secondary Market
查看>>
linux目录架构
查看>>
golang 坑集
查看>>