正解:dp

解题报告:

  传送门

  首先可以先拆下这个贡献式,为了方便之后设状态什么的,把式子转成和ny有关,就成了

  \(\sum \left ( n-i \right )^{a}\cdot i^{b}\)

  然后拆下式子化简下,就可以得到

  \(\sum \binom{a}{i}\cdot n^{i}\cdot \left ( -1 \right )^{a-i}\cdot y^{a+b-i}\)

  所以现在就只要能预处理出\(y^{a+b-i}\)就能\(O\left ( n \right )\)得求出来辣!

  所以考虑设dp式\(f[i][j]\)填到了第\(i\)位的时候特征值的\(j\)次方的贡献

  \(umm\)感觉表示得不太清,,,再瞎解释下这个所谓的"特征值的\(j\)次方的贡献",其实指的就这个\(y^{a+b-i}\),然后此处的\(j\)指的就\(a+b-i\)

  然后因为j不能相邻所以考虑加一维\([0/1]:\)最后一位是\(0\)还是\(1\)

  然后转移的话就直接枚第i位填\(01\)就欧克鸭,写下转移式趴QwQ

  \(f[i][j][0]=f[i-1][j][0]+f[i-1][j][1]\)

  \(f[i][j][1]=∑\binom{j}{k}\cdot f[i-1][k][0]\)

  关于\(1\)这个,瞎解释下趴,就,拆下式子嘛,因为填1就相当于\(y^{j}\)成了\(y^{j+1}\)

  拆一下做个差得贡献为\(\sum \binom{i}{j}\cdot y^{j-i}\)

  矩阵加速就好,,,随便讲下矩阵怎么构造的趴,,,

  首先显然想到把矩阵分成两块儿嘛,就直接上半边全放\(f[i][j][0]\)下半边\(f[i][j][1]\)行趴

  然后因为\(f[i][j][0]=f[i-1][j][0]+f[i-1][j][1]\),\(so\)转移矩阵就会是大概这样儿:

  \begin{bmatrix}\ 1\ 0\ 0\ ...\ ...\ 1\ 0\ 0\ ...\ ...\end{bmatrix}

  那对于\(f[i][j][1]=∑\binom{j}{k}\cdot f[i-1][k][0]\),也不难想到转移矩阵大概就这样儿的:

  \begin{bmatrix}\ \binom{i}{0}\ \binom{i}{1}\ \binom{i}{2}\ \binom{i}{3}\ ...\ \binom{i}{i}\ 0\ 0\ ...\ ...\end{bmatrix}

  综上,这题就做完辣\(QwQ\)(,,,这可能是我写过的最久的一篇博客辽,,,\(markdown\)虽然真滴很好看但也真滴很耗时间啊,,,\(awsl\),,,\(QAQ\)

  

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define gc getchar()
#define ri register int
#define rc register char
#define rb register bool
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i) const int N=200+10,M=50+10;
int n,a,b,mod,C[N][N],poww[N],as,m;
struct matrix
{
int s[N][N];
void clear(){memset(s,0,sizeof(s));}
void pre(){clear();rp(i,0,m-1)s[i][i]=1;}
int *operator[](int x){return s[x];}
}G; il int read()
{
rc ch=gc;ri x=0;rb y=1;
while(ch!='-' && (ch>'9' || ch<'0'))ch=gc;
if(ch=='-')ch=gc,y=0;
while(ch>='0' && ch<='9')x=(x<<1)+(x<<3)+(ch^'0'),ch=gc;
return y?x:-x;
}
il int ad(ri x,ri y){x+=y;if(x>=mod)x-=mod;return x;}
il int power(ri x,ri y){ri ret=1;while(y){if(y&1)ret=1ll*ret*x%mod;x=1ll*x*x%mod;y>>=1;}return ret;}
il void pre(ri d)
{
rp(i,0,d)C[i][0]=1;
rp(i,1,d)
rp(j,1,i)C[i][j]=ad(C[i-1][j],C[i-1][j-1]);
poww[0]=1;
rp(i,1,d)poww[i]=1ll*poww[i-1]*n%mod;
}
matrix operator*(matrix &a,matrix &b)
{
matrix ret;ret.clear();
rp(i,0,m-1)
rp(k,0,m-1)
if(a[i][k])
rp(j,0,m-1)
ret[i][j]=ad(ret[i][j],1ll*a[i][k]*b[k][j]%mod);
return ret;
}
matrix m_power(matrix x,ri y)
{
matrix ret;ret.clear();ret[0][0]=1;
while(y){if(y&1)ret=ret*x;x=x*x;y>>=1;}
return ret;
} int main()
{
n=read();a=read();b=read();mod=read();ri l=a+b+1;m=l<<1;pre(a+b+1);
rp(i,0,a+b)
{
G[i+l][i]=G[i][i]=1;
rp(j,0,i)G[j][i+l]=C[i][j];
}
matrix A=m_power(G,n);
for(ri i=0,d=(a&1)?mod-1:1;i<=a;++i,d=mod-d)
as=ad(as,1ll*C[a][i]*d%mod*(A[0][a+b-i]+A[0][a+b-i+l])%mod*poww[i]%mod);
printf("%d\n",as);
return 0;
}

  啊对了这题有点卡常,,,所以说说卡常小技巧趴,,,\(QAQ\)

  \(eg:\)求组合数\(C\)

    这个地方是真的挺坑,,,就应该挺多人求\(C\)会是预处理一个阶乘一个逆元那样子?

    但是这儿有个问题,就这样处理的时候要%很多次,,,\(so\)速度会比较卡,,,所以检验预处理\(C\),这道题是开得下的\(QwQ\)

  \(umm\)其实我就优化了这儿,,,也别的卡常了就只写下这个趴\(QAQ\)

洛谷P4456 交错序列[CQOI2018] dp+数论的更多相关文章

  1. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  2. NOIP2017提高组Day2T2 宝藏 洛谷P3959 状压dp

    原文链接https://www.cnblogs.com/zhouzhendong/p/9261079.html 题目传送门 - 洛谷P3959 题目传送门 - Vijos P2032 题意 给定一个 ...

  3. 洛谷P1244 青蛙过河 DP/思路

    又是一道奇奇怪怪的DP(其实是思路题). 原文戳>>https://www.luogu.org/problem/show?pid=1244<< 这题的意思给的挺模糊,需要一定的 ...

  4. 洛谷P3928 Sequence2(dp,线段树)

    题目链接: 洛谷 题目大意在描述底下有.此处不赘述. 明显是个类似于LIS的dp. 令 $dp[i][j]$ 表示: $j=1$ 时表示已经处理了 $i$ 个数,上一个选的数来自序列 $A[0]$ 的 ...

  5. 洛谷P1140 相似基因 (DP)

    洛谷P1140 相似基因 题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了44种核苷酸,简记作A,C,G,TA,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. ...

  6. 洛谷P2224 [HNOI2001] 产品加工 [DP补完计划,背包]

    题目传送门 产品加工 题目描述 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时 ...

  7. 洛谷1417 烹调方案 dp 贪心

    洛谷 1417 dp 传送门 挺有趣的一道dp题目,看上去接近于0/1背包,但是考虑到取每个点时间不同会对最后结果产生影响,因此需要进行预处理 对于物品x和物品y,当时间为p时,先加x后加y的收益为 ...

  8. 洛谷1387 二维dp 不是特别简略的题解 智商题

    洛谷1387 dp题目,刚开始写的时候使用了前缀和加搜索,复杂度大概在O(n ^ 3)级别,感觉这么写还是比较对得起普及/提高-的难度的..后来看了题解区各位大神的题解,开始一脸mb,之后备受启发. ...

  9. 洛谷 P2657 (数位DP)

    ### 洛谷 P2657 题目链接 ### 题目大意:给你一个数的范围 [A,B] ,问你这段区间内,有几个数满足如下条件: 1.两个相邻数位上的数的差值至少为 2 . 2.不包含前导零. 很简单的数 ...

随机推荐

  1. 【原创】大数据基础之Quartz(1)简介、源代码解析

    一简介 官网 http://www.quartz-scheduler.org/ What is the Quartz Job Scheduling Library? Quartz is a richl ...

  2. 递归遍历所有xml的节点及子节点

    import java.io.File; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; i ...

  3. Java面试题复习笔记(框架)

    1.什么是框架? 为解决一个开放性问题而设计的具有一定约束性的支撑结构,再次结构上可以根据具体问题扩展,安插更多的组成部分,从而更迅速和方便地构建完整解决问题的方案. 2.MVC模式? 用一种业务逻辑 ...

  4. 点击页面上的元素,页面删除removeChild()

    简单描述:最近做了一个图片上传,上传完成回显图片的时候,需要用到点击图片,从页面删除的效果,然后就找到了removeChild()方法,说实话,我刚看到的时候,就觉得这个问题已经解决了,但是却发现这个 ...

  5. SQL反模式学习笔记7 多态关联

    目标:引用多个父表 反模式:使用多用途外键.这种设计也叫做多态关联,或者杂乱关联. 多态关联和EAV有着相似的特征:元数据对象的名字是存储在字符串中的. 在多态关联中,父表的名字是存储在Issue_T ...

  6. seata-server安装、运行(ubuntu)

    seata-server为seata中的事务协调器. seata的wiki https://github.com/seata/seata/wiki/Home_Chinese 一.下载并安装 wget ...

  7. 蓝桥杯 购物单(使用word协助)

    标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折 ...

  8. 百度语音+react+loopback实现语音合成返回播放

    1.在百度语音中创建自己的项目,需要拿到APP_ID.API_KEY.SECRET_KEY. 2.loopback端提供接口服务,在./boot目录下新建root.js文件,编写不依赖模型的自定义接口 ...

  9. hwy题目选讲

    \[ f(n) = n/5 + f(n/5)\\ g(n) = (n\mod10)! * g(n/5)\mod 5\\ ans = f(n)*inv(2^g(n))\\ \]

  10. 数字图像特征提取之HOG特征

    1.灰度化:(以便可以使用sobel等算子计算梯度)2.gamma校正: (降低光照影响)3.求每个像素的梯度和方向: (利用任意一种梯度算子,例如:sobel,laplacian等,对该patch进 ...