Description
给出长度分别为1~n的珠子,长度为i的珠子有a[i]种,每种珠子有无限个,问用这些珠子串成长度为n的链有多少种方案

题解:

  • dp[i]表示组合成包含i个贝壳的项链的总方案数
  • 转移:dp[i]=Σdp[i-j]*a[j](1<=j<=i)
  • #include <bits/stdc++.h>
    using namespace std;
    #define dob complex<double>
    #define rint register int
    #define mo 313
    #define IL inline
    const double pi=acos(-1.0);
    const int N=2e5;
    dob a[N],b[N],bb[N];
    int n,m,r[N],l,dp[N],sum[N];
    IL void fft(dob *a,int o)
    {
    for (rint i=;i<n;i++)
    if (i>r[i]) swap(a[i],a[r[i]]);
    for (rint i=;i<n;i*=)
    {
    dob wn(cos(pi/i),sin(pi*o/i)),x,y;
    for (rint j=;j<n;j+=(i*))
    {
    dob w(,);
    for (rint k=;k<i;k++,w*=wn)
    {
    x=a[j+k],y=w*a[i+j+k];
    a[j+k]=x+y,a[i+j+k]=x-y;
    }
    }
    }
    }
    IL void query()
    {
    l=;
    for (n=;n<=m;n<<=) l++;
    for (rint i=;i<n;i++) r[i]=(r[i/]/)|((i&)<<(l-));
    fft(a,); fft(b,);
    for (rint i=;i<n;i++) a[i]*=b[i];
    fft(a,-);
    for (rint i=;i<=m;i++)
    sum[i]=a[i].real()/n+0.5,sum[i]%=mo;
    }
    #define mid (l+r)/2
    void cdq(int l,int r)
    {
    if (l==r) return;
    cdq(l,mid);
    for (rint i=l;i<=mid;i++) a[i-l]=dp[i];
    m=r-l;
    rint x;
    for (x=;x<=m;x<<=);
    for (rint i=mid+;i<=l+x;i++) a[i-l]=;
    b[]=;
    for (rint i=;i<=x;i++) b[i]=bb[i];
    query();
    for (rint i=mid-l+;i<=r-l;i++)
    {
    dp[i+l]+=sum[i];
    dp[i+l]%=mo;
    }
    cdq(mid+,r);
    }
    int main()
    {
    freopen("noi.in","r",stdin);
    freopen("noi.out","w",stdout);
    std::ios::sync_with_stdio(false);
    int k;
    while (cin>>k&&k)
    {
    for (rint i=;i<=k;i++) cin>>bb[i];
    memset(dp,,sizeof(dp));
    dp[]=;
    cdq(,k);
    cout<<dp[k]%mo<<endl;
    }
    return ;
    }

该改一个fft模板了,实在是慢https://www.luogu.org/record/show?rid=3767323

#8 //HDU 5730 Shell Necklace(CDQ分治+FFT)的更多相关文章

  1. HDU 5730 Shell Necklace cdq分治+FFT

    题意:一段长为 i 的项链有 a[i] 种装饰方式,问长度为n的相连共有多少种装饰方式 分析:采用dp做法,dp[i]=∑dp[j]*a[i-j]+a[i],(1<=j<=i-1) 然后对 ...

  2. HDU Shell Necklace CDQ分治+FFT

    Shell Necklace Problem Description Perhaps the sea‘s definition of a shell is the pearl. However, in ...

  3. hdu 5730 Shell Necklace [分治fft | 多项式求逆]

    hdu 5730 Shell Necklace 题意:求递推式\(f_n = \sum_{i=1}^n a_i f_{n-i}\),模313 多么优秀的模板题 可以用分治fft,也可以多项式求逆 分治 ...

  4. HDU 5730 Shell Necklace(CDQ分治+FFT)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5730 [题目大意] 给出一个数组w,表示不同长度的字段的权值,比如w[3]=5表示如果字段长度为3 ...

  5. hdu 5730 Shell Necklace fft+cdq分治

    题目链接 dp[n] = sigma(a[i]*dp[n-i]), 给出a1.....an, 求dp[n]. n为1e5. 这个式子的形式显然是一个卷积, 所以可以用fft来优化一下, 但是这样也是会 ...

  6. HDU.5730.Shell Necklace(分治FFT)

    题目链接 \(Description\) 有\(n\)个长度分别为\(1,2,\ldots,n\)的珠子串,每个有\(a_i\)种,每种个数不限.求有多少种方法组成长度为\(n\)的串.答案对\(31 ...

  7. hdu 5730 Shell Necklace——多项式求逆+拆系数FFT

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5730 可以用分治FFT.但自己只写了多项式求逆. 和COGS2259几乎很像.设A(x),指数是长度,系数 ...

  8. hdu5730 Shell Necklace 【分治fft】

    题目 简述: 有一段长度为n的贝壳,将其划分为若干段,给出划分为每种长度的方案数,问有多少种划分方案 题解 设\(f[i]\)表示长度为\(i\)时的方案数 不难得dp方程: \[f[i] = \su ...

  9. hdu 5730 Shell Necklace —— 分治FFT

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5730 DP式:\( f[i] = \sum\limits_{j=1}^{i} f[i-j] * a[j] ...

随机推荐

  1. fffmgg

    翻译: 一.GOALS 你应该学习: 基本概念 安装ffmpeg和工具 编码视频 应用过滤器 分析视频 二.要求 这些幻灯片ffmpeg,ffprobe和ffplay的安装一些示例视频,例如:Big ...

  2. 第三节:工厂+反射+配置文件(手写IOC)对缓存进行管理。

    一. 章前小节 在前面的两个章节,我们运用依赖倒置原则,分别对 System.Web.Caching.Cache和 System.Runtime.Cacheing两类缓存进行了封装,并形成了ICach ...

  3. Hibernate_day01

    一.今天内容介绍 1 web内容回顾 (1)javaee三层结构 (2)mvc思想 2 hibernate概述 3 hibernate入门案例 4 hibernate配置文件 5 hibernate的 ...

  4. elasticsearch核心知识梳理

    https://blog.csdn.net/laoyang360/article/details/52244917

  5. luogu 2294 狡猾的商人 带权并查集

    此题做法多啊 带权并查集,区间dp,前缀和,差分约束 1.自己写的前缀和, 11 #include<bits/stdc++.h> #define rep(i,x,y) for(regist ...

  6. 数据库之MySQL ERROR 1698 (28000) 错误:Access denied for user 'root'@'localhost'" error【摘抄】

    声明:全文均摘抄于MySQL ERROR 1698 (28000) 错误 //错误起源: ~$ mysql -u root -p Enter password: ERROR 1698 (28000): ...

  7. POJ 1061 青蛙的约会 (扩展欧几里得算法)

    题目链接 Description 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件 ...

  8. 2018-2019-2 网络对抗技术 20165320 Exp3 免杀原理与实践

    ### 2018-2019-2 网络对抗技术 20165320 Exp3 免杀原理与实践 一.实验内容 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分) ...

  9. IOS中的用户安全

    用户安全: 原则:在网络传输过程中,关于用户的密码是不能传递明文的,需要通过加密之后进行传递, 一般采用的加密技术是: (1)md5+盐 (2)hmac+md5 (3)hmac+md5+时间戳   这 ...

  10. JS如何防止事件冒泡

    <div style="height:30px;line-height:30px;background:#FF0;text-align:center;" id="z ...