题目链接:agc013e Placing Squares

题目大意:

给你一个正整数序列S,长度为m,还有一个正整数n,S中元素升序且都小于n(1≤X1&lt;X2&lt;...&lt;Xm≤n−1)(1\le X_1&lt;X_2&lt;...&lt;X_m\le n-1)(1≤X1​<X2​<...<Xm​≤n−1),现在对于一个正整数序列,如果它的任意一个前缀和属于集合S就是非法的。(那个,好像按原题意默认序列元素和小于等于n)
一个合法序列a贡献是∏i=1kai2\prod_{i=1}^k ai^2∏i=1k​ai2,求所有合法序列的贡献和。(mod 10^9+7)

题解:

这个模型转化太妙了(这个题属于模型一转换就会,不转换做死的题)

问题等价于n个位置,每个位置可以放一个红球或一个绿球或一红一绿,什么都不放也可以,两个位置之间可以放隔板,第一个位置前和第n个位置后固定有隔板,但第XiX_iXi​个位置和第Xi+1X_i+1Xi​+1个位置之间不能放隔板,要求每两个隔板之间必须恰好有1个红球和一个绿球的方案数。

显然是套路性的dp+矩阵快速幂优化,可以放隔板的地方用矩阵快速幂转移,其余地方暴力转移(写的时候加了个快速乘结果被卡两个点)

这个模型转化妙就妙在红绿球。方案太多了,∏i=1kai2\prod_{i=1}^k ai^2∏i=1k​ai2难以处理导致只能先将具体方案算出再算贡献,这样就挂了。红绿球则以一种很容易dp的方式把这个式子融入了整体中,使其可以一次算出。

代码:

#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
const int M=1e5+5;
const int N=1e9+5;
const int mod=1e9+7;
struct Matrix{int n,m;int ju[5][5];Matrix(){n=m=3;memset(ju,0,sizeof(ju));ju[1][1]=ju[2][2]=ju[0][0]=1;}Matrix(int n1,int m1){n=n1,m=m1;memset(ju,0,sizeof(ju));}int MUL(int a,int b){int ret=0;while(b){if((b&1))ret=(ret+a)%mod;a=(a+a)%mod;b>>=1;}return ret;}Matrix Se(){Matrix ret(n,m);for(int i=0;i<n;i++)for(int j=0;j<m;j++)ret.ju[i][j]=ju[i][j];return ret;}Matrix operator*(const Matrix dd){Matrix ret(n,dd.m);if(dd.n!=m){printf("Error\n");return ret;}for(int i=0;i<ret.n;i++)for(int j=0;j<ret.m;j++)for(int k=0;k<m;k++)ret.ju[i][j]=(ret.ju[i][j]+(((long long)ju[i][k])*((long long)dd.ju[k][j])%mod))%mod;
//                  ret.ju[i][j]=(ret.ju[i][j]+MUL(ju[i][k],dd.ju[k][j]))%mod;return ret;}Matrix operator^(int p){Matrix ret,Self=Se();while(p){if((p&1))ret=ret*Self;Self=Self*Self;p>>=1;}return ret;}
}EM(3,3),dp(1,3),ES(3,3);int n,m;
int Si[M],E[3][3]={{1,2,1},{0,1,1},{1,2,2}};int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d",&Si[i]);for(int i=0;i<3;i++)for(int j=0;j<3;j++)EM.ju[i][j]=E[i][j];ES=EM;ES.ju[2][0]=ES.ju[2][1]=0;ES.ju[2][2]=1;dp.ju[0][0]=1,dp.ju[0][1]=2,dp.ju[0][2]=1;for(int i=1;i<=m;i++){dp=dp*(EM^(Si[i]-Si[i-1]-1));dp=dp*ES;}dp=dp*(EM^(n-Si[m]-1));cout<<dp.ju[0][2]<<endl;return 0;
}

agc013e Placing Squares(模型转化+dp+矩阵优化)相关推荐

  1. BZOJ 1009: [HNOI2008]GT考试(kmp+dp+矩阵优化)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1009 题意: 思路: 真的是好题啊! 对于这种题目,很有可能就是dp,$f[i][j]$表示分析到第 ...

  2. [HDU2157]How many ways??(DP + 矩阵优化)

    传送门 k < 20 k这么小,随便dp一下就好了... dp[i][j][k]表示从i到j经过k个点的方案数 4重循环.. 但是如果k很大就不好弄了 把给定的图转为邻接矩阵,即A(i,j)=1 ...

  3. hdu 3962(AC自动机+矩阵优化dp)

    转载标记处:http://blog.csdn.net/woshi250hua/article/details/7599472 题目大意:给定m个DNA病毒序列,求碱基构成的长度为n且含有两个以上DNA ...

  4. bzoj 3120 矩阵优化DP

    我的第一道需要程序建矩阵的矩阵优化DP. 题目可以将不同的p分开处理. 对于p==0 || p==1 直接是0或1 对于p>1,就要DP了.这里以p==3为例: 设dp[i][s1][s2][r ...

  5. 玲珑杯 1009 Spoon Devil's Bucket 矩阵优化DP

    [题意]有n个桶,初始装有一些水,然后每一份钟都可以用已经有的关系相互倒,问经过m时间后每个桶里面的水的量分别是多少? [分析]题意读懂之后很容易想明白,其实就是个递推的问题.但是由于M过于大,递推问 ...

  6. 【推荐系统】隐语义模型(LFD)与矩阵分解(Matrix Factorization)

    如果需要完整代码可以关注下方公众号,后台回复"代码"即可获取,阿光期待着您的光临~ 文章目录 1.隐语义模型与矩阵分解 2.隐语义模型(Latent Factor Model) 3 ...

  7. bzoj1297 [SCOI2009]迷路(矩阵优化)

    Description windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同 ...

  8. 浅谈BERT/Transformer模型的压缩与优化加速

    ©作者 | 姚益武 单位 | 阿里巴巴集团 研究方向 | AI算法与工程架构 前言 BERT/Transformer 结构及其变体,已成为自然语言处理(NLP).语音识别 (ASR)等领域的主流序列建 ...

  9. 【Codeforces 321E / BZOJ 5311】【DP凸优化】【单调队列】贞鱼

    目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连 ...

最新文章

  1. OneFlow 并行特色
  2. 腾讯Angel升级:加入图算法,支持十亿节点、千亿边规模!中国首个毕业于Linux AI基金会的开源项目...
  3. 修改mysql远程连接
  4. Docker怎样提交镜像(把容器打成镜像)
  5. QT-第一个程序 Hello QT , 以及QT creator介绍
  6. WebRTC 之ICE浅谈
  7. python利用什么模块_什么是Python的heapq模块?
  8. 在网络虚拟化之前部署NFV将使运营商网络面临风险
  9. 如何查看/统计当前AD域控制器的活动用户
  10. apache配置多https域名对应单个证书和多个不同的https域名对应多个不同的证书
  11. Android5.0(Lollipop) BLE蓝牙4.0+浅析code(二)
  12. bm算法java,图解 BM 算法
  13. python二手房数据分析_使用python抓取分析链家网二手房数据
  14. oracle优化器analyzed,Oracle Optimizer:迁移到使用基于成本的优化器—–系列1.2-数据库专栏,ORACLE...
  15. 力扣5713. 字符串中不同整数的数目
  16. python挑选以元音字母开头的单词_帮我总结一下,元音字母开头但是读音是辅音的英语单词例如uniform看上去应该是anuniform但事实是auniform的...
  17. Fishermen Gym - 101964E(二分+前缀数组)
  18. 一款软件界面的重要性
  19. java问题解读,String类为什么是final的
  20. 知乎APP使用 产品体验报告

热门文章

  1. Fork/Join(分开/联合)
  2. xc7k325tffg900芯片手册_XC7K325TFFG900_Spartan-3【太航半导体】闻喜县
  3. 8本必读关于人工智能伦理问题、社会价值及影响书籍推荐
  4. [LeetCode][算法初级][数组] 30 有效的数独
  5. EBS Form : 消息字典 fnd_message. (转)
  6. java jnlp_Java Web Start实践:动态生成JNLP
  7. 使用PDF24 将mathmatica 的.nb文件转化为PDF文档
  8. android 窗口切换花屏,分享Android4平台二级页面滚动花屏问题的解决方案v1.0.0
  9. 交换机的背板容量、交换容量和包转发能力
  10. Aseprite动画技巧