![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
概率期望dp
Ren_Ivan
衡中oier,fight for furture
展开
-
bzoj 1076 奖励关 状压+期望dp
因为每次选择都是有后效性的,直接dp肯定不行,所以需要逆推。f[i][j]表示从第i次开始,初始状态为j的期望收益#include#include#includeusing namespace std;int bit[18],K,n,aa,ned[18],a[18];double f[105][1<<17];int main(){ bit[0]=1; for(int i=原创 2017-07-09 19:47:39 · 308 阅读 · 0 评论 -
bzoj 4008 亚瑟王 期望概率dp
对于这种看起来就比较傻逼麻烦的题,最关键的就是想怎么巧妙的设置状态数组,使转移尽可能的简洁。一开始我想的是f[i][j]表示到第j轮第i张牌还没有被选的概率,后来发现转移起来特别坑爹,还会有重的或漏的情况。于是改变想法:f[i][j]表示考虑到前i张牌,还剩j轮的概率转移也就简单了,下一张牌有两种可能,选或不选:f[i+1][j]=f[i][j]*(1-p[i+1])^j f[原创 2017-07-09 17:28:19 · 361 阅读 · 0 评论 -
bzoj 4318 OSU 概率期望dp
可以发现:f[i]转移到f[i+1]只和最后一串1的长度和平方有关,因为如果新加的位置是1,贡献就是(x+1)^3-x^3=3x^2+3x+1,否则为0;所以对于每一个位置,处理出期望的f,x和x^2(x表示最后一串1的长度)即可#include#define N 100100int n; double a1[N],a2[N],f[N],p[N];int main(){原创 2017-07-22 14:03:04 · 239 阅读 · 0 评论 -
bzoj 4832 抵制克苏恩 概率期望dp
考试时又翻车了.....一定要及时调整自己的思路!!!随从最多有7个,只有三种,所以把每一种随从多开一维so:f[i][j][k][l]为到第i次攻击前,场上有j个1血,k个2血,l个3血随从的概率最后利用期望的可加性都加起来就好了ps.30滴血受到四五十伤害,完全tm不符合逻辑啊,mdzz!!!#include#include#include#include#in原创 2017-07-31 15:07:33 · 375 阅读 · 0 评论 -
bzoj 1426 收集邮票
f[i]:当前已拥有i种邮票,还需要买的邮票数的期望值。g[i]:当前已拥有i种邮票,还需要的钱的期望值。每张邮票初始都是1元钱,每买一张邮票,还没购买的邮票每张都涨价1元。 f[i]=1+(n-i)/n*f[i+1]+i/n*f[i]--->>f[i]=f[i+1]+n/(n-i)g[i]=1+(n-i)/n*(g[i+1]+f[i+1])+i/n*(g[i]原创 2017-07-27 12:22:25 · 285 阅读 · 0 评论 -
bzoj 2510 弱题 矩阵乘
看题就像矩阵乘但是1000的数据无从下手打表发现每一行的数都是一样的,只不过是错位的,好像叫什么循环矩阵于是都可以转化为一行的,O(n3)->O(n2)*logk#include#include#include#include#includeusing namespace std;int n,m,k,yy[1005][1005];double ma[1005],A[100原创 2017-07-27 20:02:11 · 297 阅读 · 0 评论