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. Linux下SVN使用

    转载:参考文章http://www.linuxidc.com/Linux/2011-09/42347.htm 1. 将文件checkout到本地目录     svn checkout path(pat ...

  2. 上传文件服务器与web内容服务分离

    现在难点在:     1\单击表单提交按钮后,图片上传到图片服务器,文字内容上传web服务器数据库,这两个服务器分别在两个城市.     2\图片不能通过web服务器中转.     3\web服务器内 ...

  3. nxlog 日志采集

    Nxlog 主要用于各业务后端服务的日志采集,windows环境和linux环境都支持. RPM 包:rpm -ivh http://nxlog.co/system/files/products/fi ...

  4. pyqt5 添加属性-类方法用属性形式访问

    方法一 装饰器法 import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout,QLab ...

  5. ado.net 访问excel

    1 类:OleDbConnection ... 2 connection string : Provider=Microsoft.ACE.OLEDB.12.0;Data Source={excelPa ...

  6. java 多线程和并行程序设计

    多线程使得程序中的多个任务可以同时执行 在一个程序中允许同时运行多个任务.在许多程序设计语言中,多线程都是通过调用依赖系统的过程或函数来实现的 为什么需要多线程?多个线程如何在单处理器系统中同时运行? ...

  7. 【vim】实时加密文本 ggVGg?

    如果你不想让别人看懂你的屏幕上的内容,你可以使用一个内置的选项,通过下面的命令使用 ROT13 来对文本进行编码: ggVGg? gg 把光标移动到 Vim 缓冲区的第一行, V 进入可视模式, G ...

  8. python将图片转换为Framebuffer裸数据格式(终端显示图片)【转】

    转自:https://www.cnblogs.com/zqb-all/p/6107905.html 要在ubuntu终端显示图片或者在板子的LCD显示图片,Framebuffer是一个简单易用的接口, ...

  9. Caching漫谈--关于Cache的几个理论

    如今缓存是随处可见了,如果你的程序还没有使用到缓存,那可能是你的程序并发量很低,或对实时性要求很低.我们公司的ERP在显示某些报表时,每次打开都需要花上几分钟的时间,假如搜索引擎也是这么慢,我想这家搜 ...

  10. Linux: 介绍make menuconfig中的每个选项含义【转】

    转自:http://blog.csdn.net/gaoyuanlinkconcept/article/details/8810468 介绍make menuconfig中的每个选项含义 Linux 2 ...