随笔分类 -  动态规划—期望

摘要:首先看这样做的特点,就是分到最后小块里的点合并上去的时候相对顺序不变,所以先加上块内逆序对的期望 合并的时候一定是一边卡住一个大值,另一边跳指针,所以把一个值向右直到有大于它的值位置的一段区间看作一段 当前合并两块合并到第i个和第j个,如果i和j都是块的开头就一定不会构成逆序对,因为双指针的时候会直 阅读全文
posted @ 2019-06-17 17:00 lokiii 阅读(260) 评论(0) 推荐(1)
摘要:区间不交叉,可以看出区间构成了树形结构,建出树之后,设f[u][i]为u这个区间最大值最多加i的概率,转移是\\( f[u][i]=p[u]\ \prod f[v][mxu mxv 1]+(1 p[u])\ \prod f[v][mxu mxv] \\) 注意要理性选择建树方式,扫描就行了,不要瞎二 阅读全文
posted @ 2019-06-16 17:28 lokiii 阅读(174) 评论(0) 推荐(0)
摘要:首先恋人操作过一轮之后逆序对不会变多,所以设f[i]为把i个逆序对消掉的期望次数,f[i]=0.5f[i 2]+0.5f[i]+2,化简然后递推即可 cpp include include using namespace std; const int N=3005; int n,m,a[N]; do 阅读全文
posted @ 2019-06-14 11:15 lokiii 阅读(156) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-03-13 21:41 lokiii 阅读(7) 评论(0) 推荐(0)
摘要:这个输出可是有点恶心啊……WA\ inf,最后抄了别人的输出方法orz 还有注意会爆long long,要开unsigned long long 对于k==1,单独考虑每一位i,如果这一位为1则有0.5的概率贡献1 include include using namespace std; const 阅读全文
posted @ 2018-11-25 17:24 lokiii 阅读(203) 评论(0) 推荐(0)
摘要:宋营离此路途远 快马加鞭一夜还 阅读全文
posted @ 2018-09-27 16:24 lokiii 阅读(134) 评论(0) 推荐(0)
摘要:因为边权为1所以a直接bfs瞎搞就行……我一开始竟然写了个spfa cpp include include include include using namespace std; const int N=1005,inf=1e9; int n,m,st,ed,h[N],cnt,a[N][N],b[ 阅读全文
posted @ 2018-09-21 21:57 lokiii 阅读(112) 评论(0) 推荐(0)
摘要:dfs会T,只好正反两遍拓扑了…… cpp include include include include using namespace std; const int N=100005; int n,m,h[N],cnt,d1[N],d2[N]; double f[N],p[N],s[N],ans 阅读全文
posted @ 2018-09-21 17:43 lokiii 阅读(224) 评论(0) 推荐(0)
摘要:来自lyd课件 发现s和last(s),next(s)成树结构,然后把式子化简成kx+b的形式,做树形dp即可 cpp include include include using namespace std; int n,t,a[105]; double p,q; struct qwe { doub 阅读全文
posted @ 2018-09-18 09:02 lokiii 阅读(229) 评论(0) 推荐(0)
摘要:设g[u]为这个点被儿子和自己充上电的概率,f[u]为被儿子、父亲和自己充上电的概率 然后根据贝叶斯公式(好像是叫这个),1.P(A+B)=P(A)+P(B) P(A)\ P(B),2.P(A)=(P(A+B) P(B))/(1 P(B)) g的转移很好想,根据上面的1公式,g[u]=g[u]+g[ 阅读全文
posted @ 2018-09-17 17:38 lokiii 阅读(117) 评论(0) 推荐(0)
摘要:思路有点眼熟啊,就是设l1记录长为x的极长全1串贡献x的答案,l2记录长为x的极长全1串贡献x^2的答案,f记录真正的答案 转移的话根据n (n 1)=1,n^2 (n 1)^2=2n 1,n^3 (n 1)^3=3n^2 3n+1直接转移即可 cpp include include using n 阅读全文
posted @ 2018-09-14 15:11 lokiii 阅读(114) 评论(0) 推荐(0)
摘要:以后写dp还是向后转移吧……写的把前面加起来的版本怎么也调不过去 首先注意,因为地图碎片只占1体积,所以 n, include using namespace std; const int N=405; int n,l,m,a[N]; double p[N],f[2][N][N],ans; int 阅读全文
posted @ 2018-09-12 11:40 lokiii 阅读(154) 评论(0) 推荐(0)
摘要:状压dp,设f[i][j][0/1]为前i个时间段换了j间教室的期望体力消耗,转移很好想(但是写起来好长= =) cpp include include using namespace std; const int N=2005; int n,m,v,e,c[N],d[N]; double k[N] 阅读全文
posted @ 2018-09-05 10:53 lokiii 阅读(111) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2018-08-15 22:36 lokiii 阅读(2) 评论(0) 推荐(0)
摘要:我太菜了,看的hzwer的blog才懂 大概是设f[i]表示已经拥有了i张邮票后期望还要买的邮票数,这个转移比较简单是f[i]=f[i]\ (i/n)+f[i+1] ((n i)/n)+1 然后设g[i]为还需要的钱,可以把转移看做每张票都比前面的贵1元,就是g[i]=((n i)/n)\ (g[i 阅读全文
posted @ 2018-07-21 21:58 lokiii 阅读(130) 评论(0) 推荐(0)
摘要:参考:https://blog.csdn.net/shiyukun1998/article/details/44684947 先看对于树的情况 设d[u]为点u向儿子走的期望长度和,du[u]为u点的度数,f[u]为u向儿子走的期望长度,只需要dfs两遍,一次求向儿子的d[u]+=f[e[i].to 阅读全文
posted @ 2018-07-08 22:53 lokiii 阅读(240) 评论(0) 推荐(0)