hdu 4658 Integer Partition

题意

n分拆成若干个正整数的和,每个正整数出现小于k次,分拆方案有多少。(t<=100,n<=1e5)

题解

之前写过一篇Partition Numbers的计算,后面补充了hdu 4651的做法。就是利用五边形数定理。

这题加强了限制条件。

n的无序分拆数的生成函数:

\(\sum_{i=1}^{\infty}B(i)x^i=(1+x+x^2+..)(1+x^2+x^4+..)…=\frac {1}{\prod_{i=1}^{\infty}(1-x^i)}\)

由五边形数定理知

\(\prod_{n=1}^{\infty}(1-x^n)=\sum_{k=0}^\infty (-1)^k x^{\frac {k(3k\pm 1)}{2}}\)

故\((1+B(1)x+B(2)x^2+..)(1-x-x^2+x^5+x^7+..)=1\)。

比较两边\(x^n\)系数,得到

\(B(n)-B(n-1)-B(n-2)+B(n-5)+B(n-7)+..=0\)

所以可以\(O(n^{1.5})\)计算出B。

有了限制,生成函数变成

\(g(x)=(1+x+x^2+..+x^{k-1})(1+x^2+x^4+..+x^{2(k-1)})…= {\prod_{i=1}^\infty(1-x^{ik})}B(x)\)

再利用五边形数定理得

\(g(x)=(1-x^k-x^{2k}+x^{5k}+..)(1+B(1)x+B(2)x^2+B(3)x^3+..)\)

\(x^n\)的系数即为答案。

代码

int n,k;
int B[N]={1,1,2};
int main() {
int t;
sf(t);
for(int i=3;i<N;++i)
for(int j=1,f=1;f;++j)
for(int k=-1;k<2;k+=2){
int w=(3*j*j+k*j)/2;
if(w>i){f=0;break;}
if(j%2)B[i]=(B[i]+B[i-w])%mod;
else B[i]=(B[i]-B[i-w]+mod)%mod;
}
while(t--){
sf(n);sf(k);
int ans=0;
ans=B[n]%mod;
for(int i=1,f=1;f;++i)
for(int j=-1;j<2&&f;j+=2){
int w=(3*i*i+j*i)/2;
if(w*k>n){f=0;break;}
if(i%2==0)ans=(ans+B[n-w*k])%mod;
else ans=(ans-B[n-w*k]+mod)%mod;
}
printf("%d\n",ans);
}
return 0;
}

【hdu 4658】Integer Partition (无序分拆数、五边形数定理)的更多相关文章

  1. hdu 4651 Partition && hdu 4658 Integer Partition——拆分数与五边形定理

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4651 参考:https://blog.csdn.net/u013007900/article/detail ...

  2. HDU 4658 Integer Partition (2013多校6 1004题)

    Integer Partition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  3. HDU 4658 Integer Partition(整数拆分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4658 题意:给出n.k.求n的拆分方案数.要求拆分中每个数不超过k. i64 f[N]; void i ...

  4. hdu 4658 Integer Partition

    五角数定理!!可以参考这个http://www.cnblogs.com/xin-hua/p/3242428.html  代码如下: #include<iostream> #include& ...

  5. hdu 4651 Partition(整数拆分+五边形数)

    Partition Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. hdu4651(广义五边形数 & 分割函数1)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4651 题意:f(x) 为将 x 分成其他数和的形式的方案数.对于 t 组输入,输出 f(xi). 思路 ...

  7. HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)

    HDU 1068 :题目链接 题意:一些男孩和女孩,给出一些人物关系,然后问能找到最多有多少个人都互不认识. 转换一下:就是大家都不认识的人,即最大独立集合 #include <iostream ...

  8. HDU 4160 Dolls (最小路径覆盖=顶点数-最大匹配数)

    Dolls Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  9. [HDU 3625]Examining the Rooms (第一类斯特林数)

    [HDU 3625]Examining the Rooms (第一类斯特林数) 题面 有n个房间,每个房间有一个钥匙,钥匙等概率的出现在n个房间内,每个房间中只会出现且仅出现一个钥匙.你能炸开门k次, ...

随机推荐

  1. 几个jdbc小技巧

    版本:jdk:1.6mysql-connector-5.0.8 1.如何用jdbc判断某个基本表是否存在 一种比较“笨”的方法:    try{         stmt.executeQuery( ...

  2. semantic-ui 模态窗口

    模态窗口即加了ui modal的class的div而已,会有点像是alert弹出框的形式,但是美观一点点.

  3. Linux 典型应用之WebServer 安装和配置

    Apache的基本操作 安装 yum install httpd 启动 service httpd start  在浏览器中输入以下Ip 发现无法访问 http://192.168.1.109/ 输入 ...

  4. Linux sudoers

    xxx is not in the sudoers file.This incident will be reported.的解决方法 - xiaochaoyxc - 博客园http://www.cn ...

  5. [转帖]HPE的软件部分到底是谁的?

    英国Micro Focus公司收购惠普旗下软件部门 http://www.gongkong.com/news/201710/369740.html 搞不清楚 现在ALM 到底是谁的资产了.. 据国外媒 ...

  6. [转帖]CentOS 查看系统信息汇总

    CentOS 查看系统信息汇总 http://blog.itpub.net/15498/viewspace-2637493/ 感觉应该是 centos相关的 改了下名字 日志文件说明 /var/log ...

  7. zookeeper的安装和启动教程

    zookeeper的安装和启动 zookeeper安装包所在目录: 上传文件到虚拟机.现在本地新建一个目录setup,将zookeeper压缩包复制进去. ALT+P打开一个标签,操作如下put命令. ...

  8. Eclipse导入工程后出现中文乱码

    Eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...

  9. 爬取B站视频

    先安装you_get pip install you_get 爬取代码,爬了个ASMR的,学习困了自我催眠 import sys from you_get import common as you_g ...

  10. python爬虫之线程池和进程池

    一.需求 最近准备爬取某电商网站的数据,先不考虑代理.分布式,先说效率问题(当然你要是请求的太快就会被封掉,亲测,400个请求过去,服务器直接拒绝连接,心碎),步入正题.一般情况下小白的我们第一个想到 ...