博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj千题计划309:bzoj4332: JSOI2012 分零食(分治+FFT)
阅读量:6589 次
发布时间:2019-06-24

本文共 1321 字,大约阅读时间需要 4 分钟。

 

因为如果一位小朋友得不到糖果,那么在她身后的小朋友们也都得不到糖果。

所以设g[i][j] 表示前i位小朋友,分到j个糖果,且前i位小朋友都分到糖果的方案数

令F(x) 表示分到x个糖果的欢乐程度

∴g[i][j] = ∑ g[i-1][j-k]*F(k)

记g[i]=g[i-1]*F,则 g[i]=F ^ i

但是要求的是 Σ g[i][m]

记f[n]=Σ g[i]  i∈[1,n] ,那么ans=f[n][m]

f[n]=Σ g[i]  i∈[1,n]

     =Σ f(n/2)+Σ g[i]  i∈[n/2+1,n]

     =Σ f(n/2)+Σ F^i  i∈[n/2+1,n]

     =Σ f(n/2)+Σ F^(n/2+i)  i∈[1,n/2]

     =Σ f(n/2)+F^(n/2) * Σ F^i  i∈[1,n/2]

     =Σ f(n/2)+g(n/2)*f(n/2)

然后可以分治解决

如果n是奇数,f(n)=f(n-1)+g[n]=f(n-1)+g(n-1)*f

边界条件:g[][0]=1

 

#include
#include
#include
using namespace std;const int M=1<<17;#define N 10001int m,mod;int r[M+1];int len;const double pi=acos(-1);struct Complex{ double x,y; Complex() { } Complex(double x_,double y_):x(x_),y(y_) { } Complex operator + (Complex p) { Complex C; C.x=x+p.x; C.y=y+p.y; return C; } Complex operator - (Complex p) { Complex C; C.x=x-p.x; C.y=y-p.y; return C; } Complex operator * (Complex p) { Complex C; C.x=x*p.x-y*p.y; C.y=x*p.y+y*p.x; return C; } void clear() { x=y=0; }};typedef Complex E;E F[M+1],f[M+1],g[M+1],tmp[M+1];void FFT(E *a,int ty){ for(int i=0;i
>1]>>1)|((i&1)<

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8960712.html

你可能感兴趣的文章
IP地址与数字地址相互转换
查看>>
.net core 允许跨域
查看>>
Knockout.Js官网学习(创建自定义绑定)
查看>>
win10 x64中 windbg x64 安装配置符号库
查看>>
python 抽象类、抽象方法、接口、依赖注入、SOLIP
查看>>
echarts 报错问题 is null 或者未定义等问题
查看>>
笔记1
查看>>
POJ1068 Parencodings 解题报告
查看>>
webService发布和调用--Axis2
查看>>
递归大总结之台阶问题
查看>>
【通信4.0 重新发明通信网】读后感
查看>>
字符串连接[不用库函数]
查看>>
使用Hystrix实现自动降级与依赖隔离-微服务
查看>>
Parcelbale接口
查看>>
新建一个express工程,node app无反应
查看>>
Python去掉字符串中空格的方法
查看>>
Quartz.net任务调度(石英钟定时任务)
查看>>
黄金点游戏
查看>>
分享一个自己写的基于TP的关系模型(2)
查看>>
iOS的一些小技巧[转]
查看>>