hdu 4651 Partition——拆分数与五边形定理

Posted narh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 4651 Partition——拆分数与五边形定理相关的知识,希望对你有一定的参考价值。

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

参考:https://blog.csdn.net/u013007900/article/details/42365823

   https://blog.csdn.net/visit_world/article/details/52734860

好像这样复杂度就是 ( O(nsqrt{n} ) 的了。

技术图片
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int rdn()
{
  int ret=0;bool fx=1;char ch=getchar();
  while(ch>9||ch<0){if(ch==-)fx=0;ch=getchar();}
  while(ch>=0&&ch<=9)ret=ret*10+ch-0,ch=getchar();
  return fx?ret:-ret;
}
const int N=1e5+5,mod=1e9+7;
int upt(int x){if(x>=mod)x-=mod;if(x<0)x+=mod;return x;}
int n,a[N];
void init()
{
  int n=1e5; a[0]=1;
  for(int i=1;i<=n;i++)
    for(int j=1;;j++)
      {
    int k0=j*(3*j-1)>>1, k1=j*(3*j+1)>>1;
    int fx=(j&1)?1:-1;
    if(k0>i&&k1>i)break;
    if(k0<=i)a[i]=upt(a[i]+fx*a[i-k0]);
    if(k1<=i)a[i]=upt(a[i]+fx*a[i-k1]);
      }
}
int main()
{
  int T=rdn(); init();
  while(T--)
    n=rdn(),printf("%d
",a[n]);
  return 0;
}
View Code

 

以上是关于hdu 4651 Partition——拆分数与五边形定理的主要内容,如果未能解决你的问题,请参考以下文章

架构师成长记_第八周_10_ES-分词与五种内置分词器

架构师成长记_第八周_10_ES-分词与五种内置分词器

hdu 4135 a到b的范围中多少数与n互质(容斥)

HDU 1021(斐波那契数与因子3 **)

hdu-5646 DZY Loves Partition(贪心)

hdu 5646 DZY Loves Partition