Integer Partition

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 524 Accepted Submission(s): 238
Problem Description
Given n, k, calculate the number of different (unordered) partitions of n such that no part is repeated k or more times.
 
Input
First line, number of test cases, T. 
Following are T lines. Each line contains two numbers, n and k.

1<=n,k,T<=105

 
Output
T lines, each line contains answer to the responding test case.
Since the numbers can be very large, you should output them modulo 109+7.
 
Sample Input
4
4 2
4 3
4 4
4 5
 
Sample Output
2
4
4
5
 
Source
 
 
 

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4658

题意:问一个数n能被拆分成多少种方法,且每一种方法里数字重复个数不能超过k(等于k)。
 
五边形数定理续,结合上一题(hdu4651),先打表,然后把大于k的个数剪掉;
 

 


好吧,再啰嗦一遍:
 

用了五边形数定理以及生成函数,然而我看懂了生成函数怎么搞这题却不知道为啥生成函数是五边形数形式= =

首先观察下面的图片:

很容易我们可以发现用这种方式构造N个五边形(假设一个点也算一个五边形),需要点的个数为:

n∗(3n−1)2

接下来我们来看一下数拆分。 
提问:将一个正整数N拆成不少于一个数的和,问有多少种方案。

很容易我们可以构造一个多项式: 
P(x)=(1+x1+x2+...)(1+x2+x4+...)(1+x3+x6+...)... 
=Px(0)x0+Px(1)x1+Px(2)x2+...+Px(n)xn

可以发现N的数拆分的方案数正对应着多项式展开后xn的系数Px(n)

考虑如下等式:

(1+x1+x2+...)=11−x

因此我们有:

∏i=0∞11−xi=∑i=0∞Px(i)xi

其中上式等式左边是欧拉函数ϕ(x)的倒数。即:

1ϕ(x)=∑i=0∞Px(i)xi

欧拉函数ϕ(x)的展开式为:

ϕ(x)=(1−x)(1−x2)(1−x3)...=1−x−x2+x5+x7−x12−x15+x22+x26−...

其中的x的指数正对应着广义五边形数!

n 0 1 -1 2 -2 3 -3 4 -4
P(n) 0 1 2 5 7 12 15 22 26

现在我们要计算Px(n),由于1ϕ(x)=P(x),亦即ϕ(x)P(x)=1。

(1−x−x2+x5+...)(Px(0)+Px(1)x+Px(2)x2+Px(3)x3+...)=1

所以:Px(n)=Px(n−1)+Px(n−2)−Px(n−5)−Px(n−7)+...

由于对于满足i(3i−1)2≤n的i的个数不超过(√n)个,于是计算所有Px(n)的复杂度为O(n(√n))


上面我们说明的是不带限制的数拆分,现在我们给定一个限制:拆分出来的每种数的个数不能大于等于k(这也是本题的要求)。

类似的,我们考虑生成函数:

(1+x1+x2+...+xk−1)(1+x2+x4+...x2(k−1))...=∏i=0∞1−xki1−xi=ϕ(xk)ϕ(x)=ϕ(xk)P(x)

展开ϕ(xk)得:

(1−xk)(1−x2k)(1−x3k)...=1−xk−x2k+x5k+x7k−x12k−x15k+...

然后可得:

ϕ(xk)P(x)=(1−xk−x2k+x5k...)(Px(0)+Px(1)x+Px(2)x2+Px(3)x3+...)

令Fk(n)表示n的满足数拆分时每种数的个数小于等于k的数拆分方案数。则有:

Fk(n)=Px(n)−Px(n−k)−Px(n−2k)+Px(n−5k)+...

 
一开始超时了,不然把取余的部分修改了下就过了。。。
 

 
卡过啊!
 
转载请注明出处:寻找&星空の孩子
 #include<iostream>
#include<cstdio>
#define NN 100005
#define LL __int64
#define mod 1000000007 using namespace std;
LL wu[NN],pa[NN];
void init()
{
pa[]=;
pa[]=;
pa[]=;
pa[]=;
LL ca=;
for(LL i=; i<=/; i++)
{
wu[ca++]=i*(*i-)/;
wu[ca++]=i*(*i+)/;
if(wu[ca-]>) break;
}
for(LL i=; i<=; i++)
{
pa[i]=(pa[i-]+pa[i-])%mod;
ca=;
while(wu[*ca]<=i)
{
if(ca&)
{
pa[i]=(pa[i]-pa[i-wu[*ca]]);
pa[i]=(pa[i]%mod+mod)%mod;
if(wu[*ca+]<=i)
pa[i]=(pa[i]-pa[i-wu[*ca+]]),pa[i]=(pa[i]%mod+mod)%mod;
}
else
{
pa[i]=(pa[i]+pa[i-wu[*ca]]);
pa[i]=(pa[i]%mod+mod)%mod;
if(wu[*ca+]<=i)
pa[i]=(pa[i]+pa[i-wu[*ca+]]),pa[i]=(pa[i]%mod+mod)%mod;
}
ca++;
}
}
}
LL work(int n,int k)
{
LL ans=pa[n];
LL ca=;
while(k*wu[*ca]<=n)
{
if(ca&)
{
ans=(ans+pa[n-k*wu[*ca]]);
ans=(ans%mod+mod)%mod;
if(k*wu[*ca+]<=n)
ans=(ans+pa[n-k*wu[*ca+]]),ans=(ans%mod+mod)%mod;
}
else
{
ans=(ans-pa[n-k*wu[*ca]]);
ans=(ans%mod+mod)%mod;
if(k*wu[*ca+]<=n)
ans=(ans-pa[n-k*wu[*ca+]]),ans=(ans%mod+mod)%mod;
}
ca++;
}
return ans;
}
int main()
{
int T,n,k;
init();
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
printf("%I64d\n",work(n,k));
}
return ; }
数论还有很多需要学习!
 

Integer Partition(hdu4658)2013 Multi-University Training Contest 6 整数拆分二的更多相关文章

  1. Partition(hdu4651)2013 Multi-University Training Contest 5----(整数拆分一)

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

  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. Partition(hdu4651)2013 Multi-University Training Contest 5

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

  4. HDU 2018 Multi-University Training Contest 1 Triangle Partition 【YY】

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6300 Triangle Partition Time Limit: 2000/1000 MS (Java ...

  5. 2013 Multi-University Training Contest 6

    HDU-4655 Cut Pieces 题意:有N个格子能够被涂色,每个格子能够涂1-ai 种颜色,当N=6,涂色方案:112233 认为方案中共有3个颜色块:涂色方案:121212 认为方案中共有6 ...

  6. ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków

    ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...

  7. JSU 2013 Summer Individual Ranking Contest - 5

    JSU 2013 Summer Individual Ranking Contest - 5 密码:本套题选题权归JSU所有,需要密码请联系(http://blog.csdn.net/yew1eb). ...

  8. HDU4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)

    Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  9. HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/500 ...

随机推荐

  1. NAT技术与代理服务器

    1.什么是NAT技术? NAT(network address Translation):网络地址转换 使用端口号的NAT:网络地址与端口号转换 2.理解下图就可以完全知道NAT技术的原理: 3.什么 ...

  2. Android 9.0/P 版本推荐使用 HttpURLConnection

    早在几年前,谷歌就推荐在Android2.3版本以上使用HttpURLConnection,而在即将正式发布的 Android P 版本中,谷歌彻底取消了对Apache HTTPClient的支持,针 ...

  3. Javascript高级编程学习笔记(51)—— DOM2和DOM3(3)操作样式表

    操作样式表 在JS中样式表用一种类型来表示,以便我们在JS对其进行操作 这一类型就是CSSStyleSheet 即CSS样式表类型,包括了之前 style 对象所不包括的外部样式表以及嵌入样式表 其中 ...

  4. 没执行过 rm -rf /* 的开发不是好运维

    阅读本文大概需要 1 分钟. 打开终端,获取 root 权限,执行以下命令:rm -rf /*,会发生什么呢?估计只要接触过 Linux 的人,肯定没少听过它的故事,清楚之后会发生什么可怕的事情. 科 ...

  5. JavaScript使用浏览器内置XMLHttpRequest对象执行Ajax请求

    所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject).XMLHttpRequest 用于在后台与服务器交换数据.这意味着可以在不重新加载整个 ...

  6. 【array】数组复习

    一.定义 数组:一组相关变量的集合. 二.初始化 三种方法初始化: int [] intArray = new int[4]; //必须表明容量才表示已经初始化,不带的话会报错未初始化 String ...

  7. MySQL、MariaDB修改默认字符集

    修改2017.4.9: 最近在使用MariaDB,遇到了同样的问题:中文乱码.因为mariadb他有好几个ini文件,但是可以根据自己开发需要创建一个my.ini,然后我试着去修改mariadb安装目 ...

  8. Tomcat中server.xml配置详解(2)

    Tomcat中配置文件详解 Server.xml配置文件说明,以及Tomcat组件的说明 Tomcat服务器是由一系列可以配置的组件构成,其中核心组件是Catalina Servlet,它是最顶层组件 ...

  9. 健康,home? [java的内存浅析]

    摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 乐观上上,how can other kno u,u r yoursel ...

  10. SpringBoot 配置文件application.properties

    # =================================================================== # COMMON SPRING BOOT PROPERTIE ...