[CF708E]Student's Camp 题意:有一个n*m的网格,每一秒钟,所有左面没有格子的格子会有p的概率消失,右面没有格子的格子也会有p的概率消失,问你t秒钟后,整个网格的上边界和下边界仍然连通的概率是多少. $n,m\le 1500,t\le 10^6$. 题解:首先我们可以预处理出c数组,c[i]表示t秒钟后左边恰有i个格子消失的概率,这个用组合数算一算即可.又因为每一行的本质是相同的,所以令某一行最终剩下的格子是[l,r]的概率就是c[l-1]*c[m-r]. 然后考虑一个na…
麻麻我会做*3100的计数了,我出息了 考虑朴素DP我们怎么做呢. 设\(f_{i,l,r}\)为第\(i\)层选择\(l,r\)的依旧不倒的概率. \(q(l,r)\)表示经历了\(k\)天后,存活下来的区间为\([l,r]\)的概率. 发现其可以转为前缀后缀形式. 即前缀删掉了\(l - 1\)个,后缀删了\(m - r\)个. 而删掉的过程是独立的. 那么删掉\(i\)个的概率为\(d(i)\) 显然有\(d(i) = \binom{i}{k}p^{i} \times ({1 - p})^…
题目大意: 一个n*m的墙,被吹k天风,每块靠边的砖都有p的概率被吹掉. 如果上下两行没有直接相连的地方,我们则认为这一堵墙已经倒塌. 问最后墙不倒塌的概率(模意义). 思路: 动态规划. 用f[i][j][k]表示到了第i层,只剩下j~k的砖头并且不倒塌的概率. 则f[i][j][k]=sum{f[i-1][l][r]|[l,r]与[j,k]有交集}*这一层只剩[l,r]的概率. 概率可以O(n)预处理,接下来要枚举i,j,k,l,r,所以是O(m^4n)的. 接下来考虑预处理sum{f[i-…
Problem 一个n*m块砖的建筑,一共k天,每天风从两边吹,吹掉砖的概率为p,反之为1-p,求最终建筑没有倒塌的可能性(上层与下层有交集且每一层都有砖) Solution 首先,我们可以预处理出pl[]和pr[]数组,表示k天后左右两边风吹到的位置的可能性 然后我们可以枚举层数,当前这一层的左右端点和上一层的左右端点,如果有公共部分则转移 这样的时间复杂度是O(n^5),显然我们可以用前缀和来优化: 引入f[i][r]+=dp[i][l][r](l <= r),再用一个sumr数组维护f数组…
大意: $n$行$m$列砖, 白天左侧边界每块砖有$p$概率被摧毁, 晚上右侧边界有$p$概率被摧毁, 求最后上下边界连通的概率. 记${dp}_{i,l,r}$为遍历到第$t$行时, 第$t$行砖块范围$[l,r]$的概率. 有${dp}_{i,l,r}=p_{l,r}\sum {dp}_{i-1,l',r'}$ (要满足$[l',r']$与$[l,r]$相交) $p_{l,r}$表示$k$天后剩余砖是$[l,r]$的概率. 考虑二维前缀优化, 记$f_{i,l,r}=\sum\limits_…
Codeforces 题目传送门 & 洛谷题目传送门 神仙 *3100,%%% 首先容易注意到 \(\forall i\in[1,m]\),第 \(i\) 行剩余的砖块一定构成一个区间,设其为 \([l_i,r_i]\). 其次,由于第 \(0\) 行和第 \(m+1\) 行的砖块不可能被风吹走,因此该建筑物只可能被上下劈开,i.e.,该建筑物被劈开当且仅当 \(\exist i\in[1,m),[l_i,r_i]\cap[l_{i+1},r_{i+1}]=\varnothing\). 这时候就…
分类 知识清单 数据结构 链式前向星 树状数组 线段树 线段树的区间合并 基于ST表格的RMQ 图论 最近公共祖先 树的直径.树的重心与树的点分治 树的最小支配集,最小点覆盖与最大独立集 求无向连通图的割点  数学 鸽巢原理 群和Pólya定理基础知识 博弈 初等数论基础知识 欧几里得+拓展欧几里得 数论四大定理 反素数 动态规划 动态规划-有关计数问题的DP-多重集组合数 动态规划-有关计数问题的DP-n的m划分 字符串  KMP求字符串循环节 拓展KMP Manacher算法 STL  de…
51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式子:dp[i][j] = dp[i-1][j] + dp[i][j-1].  dp[i][j]表示当规格为i*j  (m = i && n = j)  时本题的结果. 直接上代码: #include <stdio.h> #include <string.h> #defi…
动态规划+组合数+大数 #include<cstdio> #include<cstdlib> #include<iostream> #include<algorithm> #include<memory.h> #include<cstring> #include<string.h> using namespace std; long long f[60][60],ans[60]; long long c[60][60];…
[UOJ#275]组合数问题(卢卡斯定理,动态规划) 题面 UOJ 题解 数据范围很大,并且涉及的是求值,没法用矩阵乘法考虑. 发现\(k\)的限制是,\(k\)是一个质数,那么在大组合数模小质数的情况下可以考虑使用卢卡斯定理. 卢卡斯定理写出来是\(Lucas(n,m)=Lucas(n/K,m/K)*Lucas(n\%K,m\%K)\) 显然只要有任何一个\(Lucas(n\%K,m\%K)=C_{n\%K}^{m\%K}\)是\(K\)的倍数那么当前数就会是\(K\)的倍数.因为\(K\)是…