[bzoj2510]弱题 (循环矩阵优化dp)】的更多相关文章

Description 有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球的概率均为1/M),若这个球标号为k(k < N),则将它重新标号为k + 1:若这个球标号为N,则将其重标号为1.(取出球后并不将其丢弃) 现在你需要求出,经过K次这样的操作后,每个标号的球的期望个数.   Input 第1行包含三个正整数N,M,K,表示了标号与球的个数以及操作次数. 第2行包含N个非负整数ai,表示初始…
2510: 弱题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 124  Solved: 61[Submit][Status][Discuss] Description 有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球的概率均为1/M),若这个球标号为k(k < N),则将它重新标号为k + 1:若这个球标号为N,则将其重标号为1.(取出球后并不…
题面(权限题) 题解 一道概率\(dp\),可以设\(f[i][j]\)表示第\(i\)次操作后,标号为\(j\)的小球的期望个数,那么有: \[ \begin{aligned} &f[i][j]=(1-\frac 1m)f[i-1][j]+\frac1mf[i-1][j-1](1\leq j\leq n) \\ &f[i][0]=(1-\frac 1m)f[i-1][j]+\frac1mf[i-1][n] \end{aligned} \] 这样的话转移可以写成矩阵的形式(假设有\(4\)…
链接:https://www.luogu.org/problemnew/show/P1939 题解: 矩阵优化dp模板题 搞清楚矩阵是怎么乘的构造一下矩阵就很简单了 代码: #include <bits/stdc++.h> using namespace std; #define ll long long #define mo 1000000007 ll t,x; struct re{ ll jz[][]; }a,c; re XX(re x,re y) { re tmp; memset(tmp…
题目链接 Solution 矩阵优化 \(dp\). 题中给出的式子的意思就是: 求 nk 个物品中选出 mod k 为 r 的个数的物品的方案数. 考虑朴素 \(dp\) ,定义状态 \(f[i][j]\) 代表前 \(i\) 个物品选择 \(mod~k\) 为 \(j\) 的方案数. 那么转移方程也很简单 : \[f[i][j]_{j\in[1,i)}=f[i-1][j]+f[i-1][(j-1+k)mod~k]\] 但是很显然这样是 \(O(n^2k)\) . 考虑优化,发现对于每一项状态…
我的第一道需要程序建矩阵的矩阵优化DP. 题目可以将不同的p分开处理. 对于p==0 || p==1 直接是0或1 对于p>1,就要DP了.这里以p==3为例: 设dp[i][s1][s2][r]为前i列,结尾为0的有s1行(0表示女生,1表示男生),结尾为01的有s2个,结尾为011的有n-s1-s2个,有r列全是1的方案数. 状态这么复杂,看起来一点也不能用矩阵优化,但我们可以将状态(s1,s2,r)hash成整数,然后建立状态之间的转移. 收获: 这种m超过10^7的一般都要用矩阵优化,如…
On Saint Valentine's Day, Alex imagined to present a special pendant to his girl friend made by K kind of pearls. The pendant is actually a string of pearls, and its length is defined as the number of pearls in it. As is known to all, Alex is very ri…
链接:传送门 题意: n个小朋友围成一个环( 2 <= n <= 100 )然后进行m次的游戏. 一开始,第 i 个小朋友有 Ai 个苹果. 定义游戏的规则为:每一次游戏处于 i 位置的小朋友获得( L* A(i+n-1)%n+R * A(i+1)%n )个苹果( 题目有误 ) 求 m 次游戏后每个小朋友的苹果数量. 思路: 一开始没有看到获得这两个字,gg,,也就是说 A(i) = L* A(i+n-1)%n+R * A(i+1)+A(i) ,那这道题与HDU 2276 Kiki &…
传送门 简单概率dp. 显然每次转移的式子可以用一个矩阵表示出来: 这个是循环矩阵. 因此只用维护第一行快速幂一波就行了. 代码: #include<bits/stdc++.h> #define N 1005 using namespace std; int n,m,K,a[N]; double b[N]; struct Matrix{double val[N];}ans,tmp; inline Matrix operator*(Matrix a,Matrix b){ Matrix c; me…
2510: 弱题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 374  Solved: 196 Description 有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球的概率均为1/M),若这个球标号为k(k < N),则将它重新标号为k + 1:若这个球标号为N,则将其重标号为1.(取出球后并不将其丢弃) 现在你需要求出,经过K次这样的操作后…
20分特判,一个puts("1")一个快速幂,不讲. 50%算法: 上次就讲了,可是应该还是有像 xuefen某 或 Dybal某 一样没听的. 用a×inv(b)%mod来表示分数的时候,这个分数值可加可乘(有空证明) 像是一个dp题啊. 初状态是1方案数为1,然后做乘法转移不就好了嘛? 设dp[i][j]表示进行了i次操作后所得的值为j dp[i][j*a[k]%mod]+=dp[i-1][j]; 复杂度O(mod2×m) #include<iostream> #inc…
前言 本篇强调应用,矩阵的基本知识有所省略(也许会写篇基础向...). 思想及原理 为什么Oier们能够想到用矩阵来加速DP呢?做了一些DP题之后,我们会发现,有时候DP两两状态之间的转移是定向的,也就是说,在DP转移的所有阶段中,对于一个固定的状态\(f_i\),它只能转移到一个不变的状态集合\(\{F_i\}\)中,我们转移的方向不会因为阶段的改变而改变. 好,提炼关键信息,我们需要状态的转移,且状态转移的方式不变(不排除某些毒瘤题),并且对于大多数转移,无非就是各个状态之间的带系数运算.当…
题目 https://www.lydsy.com/JudgeOnline/problem.php?id=4818 思路 先考虑没有质数限制 dp是在同余系下的,所以\(f[i][j]\)表示前i个点,和为j的方案数 转移就是\(f[i][j]=f[i-1][k]+g[(j-k)\%p]\) g[i]是x%p==i出现的个数 有质数的话 用tot-无质数 无质数就在g[i]上删去质数出现的个数,再跑一边 但是!! n很大,应该是带个log的 矩阵优化吧 代码 #include <bits/stdc…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 首先想到 确保模式串不出现 就是 确保每个位置的后缀不是该模式串. 为了dp,需要记录第 i 个位置的后缀已经有几位和模式串的前几位吻合了. 所以想到可以转移到 j+1 或 0 . 但其实不一定是0,因为可能和前面的接上.这里就要用kmp了! 注意可以和很多位置接上的时候,应该和最长的那个接上,而不是和每个 nxt 都接上,也不是什么能选择的. 知道了当前 j 能转移到哪些 j ,就…
题意 求\(N\)位数字序列(可以有前导0)中不出现某\(M\)位子串的个数,模\(K\). \(N<=10^9,M<=20,K<=1000\) 分析 设\(dp[i][j]\)表示匹配串下标\(i\)匹配到模式串下标\(j\)时,满足要求的方案数:枚举匹配串的下一位是0~9中哪个数,若原先匹配串最远能匹配到模式串的下标为\(k\),加入这个数后最远能匹配到模式串的下标为\(j\),设\(a[k][j]\)为将匹配模式串下标从\(k\)变为\(j\)的数字个数,可以用\(next\)数组…
\(Sol\) 设\(f_i\)为到第\(i\)秒的方案数,显然\(f_i=\)在第\(i\)秒前爆炸的方案数+在第\(i\)秒爆炸的方案数+在第\(i\)秒停下的方案数+在第\(i\)秒走向下一个城市 的方案数.注意到第四个转移和当前在哪个城市有关,所以要另记一维\(j\)表示当前位置.于是\(f_{i,j}=\)第\(i\)秒前在\(j\)爆炸的方案数+第\(i\)秒在\(j\)爆炸的方案数+第\(i\)秒停在\(j\)的方案数+第\(i\)秒由别的城市走向\(j\)的方案数.记这四个量分别…
求k时刻一个标号转移到各位置的概率,最后枚举每个标号加权求期望.可以发现转移矩阵是循环矩阵,因此乘法是n^2的.另外这个乘法是圆周卷积的形式,然后就作死写了发fft,发现精度升天了= = #include<cstdio> #include<cstring> #define N 1000 int n,m,k,i,j; typedef double ds[N]; ds s,t,u,q; void mul(double* s,double* t){ memset(u,0,n*8); fo…
题目 windy在有向图中迷路了. 该有向图有 N 个节点,windy从节点 0 出发,他必须恰好在 T 时刻到达节点 N-1. 现在给出该有向图,你能告诉windy总共有多少种不同的路径吗? 注意:windy不能在某个节点逗留,且通过某有向边的时间严格为给定的时间. 输入格式 第一行包含两个整数,N T. 接下来有 N 行,每行一个长度为 N 的字符串. 第i行第j列为'0'表示从节点i到节点j没有边. 为'1'到'9'表示从节点i到节点j需要耗费的时间. 输出格式 包含一个整数,可能的路径数…
题目链接 一开始想到这可能能用矩阵优化,但以为暴力就能卡过……T成二十分 首先我们回顾一下我们的暴力转移方程 用f[i][j][0/1]表示在i时刻,j点,1不爆炸,0已爆炸的方案数,那么f[i][j][0]=f[i-1][j][0]+f[i-1][j][1],f[i][j][1]=f[i-1][j][1]+f[i-1][k][1](其中k表示与j相邻的点). 然后我们看f[i][j][1]=f[i-1][j][1]+f[i-1][k][1]这个式子 如果设定j和j相连,就化简为f[i][j][…
暴力: 正解: 考虑循环矩阵,f[i][j]表示从i点到j点的方案数 我们发现n很小,我们预处理出n次的f[i][j] 然后在矩阵快速幂中,我们要从当前的f[i][j]*f[j][k]-->fir[i][j] 但是此时的循环为三层 我们考虑转移式子的意义在0-n次从i-j,在n+1到2×n转移至j 这样此时的j-k其实可以把他看作从0开始走j-k步本质上是一样的 然后还有一个特判,就不讲了 for(int j=0;j<n;++j) { ff[now][j]=(ff[now][j]+ff[las…
有M个球,一开始每个球均有一个初始标号,标号范围为1-N且为整数,标号为i的球有ai个,并保证Σai = M. 每次操作等概率取出一个球(即取出每个球的概率均为1/M),若这个球标号为k(k < N),则将它重新标号为k + 1:若这个球标号为N,则将其重标号为1.(取出球后并不将其丢弃) 现在你需要求出,经过K次这样的操作后,每个标号的球的期望个数. Input 第1行包含三个正整数N,M,K,表示了标号与球的个数以及操作次数. 第2行包含N个非负整数ai,表示初始标号为i的球有ai个. Ou…
---题面--- 题解: 一开始看觉得很难,理解了之后其实还挺容易的. 首先我们考虑朴素DP: 令f[i][j]表示长串到了第i项, 与不吉利数字(模式串)匹配到了第j项的方案. 显然ans = f[n][0] + f[n][1] + …… + f[n][m-1]: 可以肉眼看出f[1][0] = 9, f[1][1] = 1: 于是我们考虑如何转移. 首先我们观察到,f[i-1][j]如果要给f[i][k]做贡献,那么就要使得匹配到j位变成匹配到k位. 我们设g[j][k]表示原本是匹配到j位…
4861: [Beijing2017]魔法咒语 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 217  Solved: 105[Submit][Status][Discuss] Description Chandra 是一个魔法天才. 从一岁时接受火之教会洗礼之后, Chandra 就显示出对火元素无与伦比的亲和力,轻而易举地学会种种晦涩难解 的法术.这也多亏 Chandra 有着常人难以企及的语言天赋,让她能轻松流利地说出咒语中那些极其拗口的魔…
题意:你要在纸上画一个长度为n * m的括号序列,第i个位置画左括号的花费是a[i % n], 画右括号的花费是b[i % n],问画完这个括号序列的最小花费.n <= 20, m <= 1e7 思路:如果不管n和m的限制,这个题很好做,设dp[i][j]是到i位置,平衡因子是j的花费,dp[i][j] = min(dp[i - 1][j - 1] + a[i], dp[i - 1][j + 1] + b[i]),但是这样n * m到2e8级别,这是我们无法承受的.不过,我们可以发现一个性质:…
就 是 要 我 们 从  n k  件 物 品 里 面 选 出 若 干 件,使 得 其 数 量 模 k 等 于 r 的 方 案 数 . dp方程 f [ i , j ] 表示前 i 件物品拿了若干件使得其数量模 k 等 于 j 的 方 案 数. 非常明显的 i 与 i - 1递推的DP,  可以转化推矩阵,进行矩阵乘法. 那么显然有f [ i , j ] =  f [ i − 1 ,j ]  + f[ i − 1,j − 1 ]  f [  i , j ]= f  [ i  − 1,j ]+ f…
一共有 n个数,第 i 个数是 xi  xi 可以取 [li , ri] 中任意的一个值. 设 ,求 S 种类数. 输入描述: 第一行一个数 n. 然后 n 行,每行两个数表示 li,ri.   输出描述: 输出一行一个数表示答案. 示例1 输入 复制 5 1 2 2 3 3 4 4 5 5 6 输出 复制 26 备注: 1 ≤ n , li , ri ≤ 100 题意: 给出n个区间,你可以随机在每个区间挑一个数,然后他们的平方和,求每个区间挑数的所有情况平方和的种类数,当然就是平方和的数重复…
题目描述 分析 定义出\(dp[i][j]\)为第\(i\)列涂\(j\)种颜色的方案数 然后我们要解决几个问题 首先是求出某一列涂恰好\(i\)种颜色的方案数\(d[i]\) 如果没有限制必须涂\(i\)种,而是有的颜色可以不涂,那么方案数为\(i^n\) 为了避免少涂的情况,我们减去只涂\(1 \sim i-1\)种颜色的方案数 即\(d[i]=i^n-\sum_{j=1}^{i-1}C_i^j \times d[j]\) 初始化为\(d[1]=1\) 接下来考虑转移 \(f[i][j]=f…
机器学习题 题目大意: 数据范围: 题解: 学长说是决策单调性? 直接斜率优化就好了嘛 首先发现的是,$A$和$B$的值必定是某两个$x$值. 那么我们就把,$y$的正负分成两个序列,$val1_i$表示$A$取序列中第$i$个数的值是,给的代价,$val2_i$同理. 那么最终的答案情况就是一个$i$一个$j$,分别是$val1_i + val2_j + a_i.x^2 + b_j.x^2 - 2*a_i.x\times b_j.x$. 显然可以斜率优化. 把第一个数列里的所有数抽象成点,为$…
设f[i][j]是到第i位 已经匹配上了j位的状态数 然后通过枚举下一位放0~9,可以用kmp处理出一个转移的矩阵 然后就可以矩阵快速幂了 #include<bits/stdc++.h> #define pa pair<int,int> #define CLR(a,x) memset(a,x,sizeof(a)) using namespace std; typedef long long ll; ; inline ll rd(){ ll x=;; ;c=getchar();} +…
CRB and Puzzle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1177    Accepted Submission(s): 468 Problem Description CRB is now playing Jigsaw Puzzle.There are N kinds of pieces with infinite…