• Luogu P3251 [JLOI2012]时间流逝 期望dp


    题面

    题面

    题解

    期望(dp)好题!

    今年(ZJOI)有讲过这题...

    首先因为(T)只有(50),大力(dfs)后发现,可能的状态数最多只有(20w)左右,所以我们就可以大力爆搜了。

    (dp_i)为状态为(i)时达到目标的期望天数。

    (dp_i=1+p*dp_{last_i}+(1-p)*frac{1}{|next_i|}*sum dp_{next_{i}})

    其中(last_{i})表示(i)删掉(min)的状态,(next_{i})表示(i)再取一个能量圈的状态。

    不难发现这样转移是一棵树。

    我们尝试下能否把(dp_i)表示成(kdp_{last_i}+b)的形式。

    先假装这个结论成立,则:(dp_i=1+p*dp_{last_i}+(1-p)*frac{1}{|next_i|}*sum (kdp_i+b))

    为方便设(A=(1-p)*frac{1}{|next_i|})

    则原式可以表示为:(dp_i=1+p*dp_{last_i}+A*sum (kdp_i+b))

    移项下得:(dp_i-A*sum (k*dp_i)=p*dp_{last_i}+A*sum b)

    (dp_i)的系数化为(1),得:(dp_i=frac{p}{1-A*sum k}*dp_{last_i}+frac{1+A*sum b}{1-A*sum k})

    这样(dp_i)就成功的化成了(k*dp_{last_i}+b)的形式了。

    初始状态不存在(last_i),所以(b)就是答案。

    注意没有能量圈的时候是必定不会损失能量圈的。

    还有就是因为我们只关心(k)(b)的值,所以在(dfs)只要记录(min)和总和即可,不必关心具体拥有的能量圈情况是什么,也不必求出(dp_i)具体的值。

    #include<bits/stdc++.h>
    #define For(i,x,y) for (register int i=(x);i<=(y);i++)
    #define Dow(i,x,y) for (register int i=(x);i>=(y);i--)
    #define cross(i,u) for (register int i=first[u];i;i=last[i])
    using namespace std;
    typedef long long ll;
    inline ll read(){
        ll x=0;int ch=getchar(),f=1;
        while (!isdigit(ch)&&(ch!='-')&&(ch!=EOF)) ch=getchar();
        if (ch=='-'){f=-1;ch=getchar();}
        while (isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
        return x*f;
    }
    struct node{
    	double k,b;
    };
    int T,n,a[51];
    double p;
    inline node dfs(int sum,int Min){
    	if (sum>T) return (node){0,0};
    	double k=0,b=0;node t;
    	For(i,1,Min) t=dfs(sum+a[i],i),k+=t.k,b+=t.b;
    	double P=!sum?0:p,G=(1-P)*(1.0/Min);
    	return (node){p/(1-G*k),(1+G*b)/(1-G*k)};
    }
    int main(){
    	while (~scanf("%lf%d%d",&p,&T,&n)){
    		For(i,1,n) a[i]=read();
    		sort(a+1,a+1+n);
    		printf("%0.3lf
    ",dfs(0,n).b);
    	}
    }
    
  • 相关阅读:
    POJ_1456 Supermarket 【并查集/贪心】
    CSS before和after伪类
    CSS anchor专为链接属性选择器
    CSS 属性选择器
    CSS float浮动
    CSS 外边距和内填充
    CSS 边框属性
    CSS 背景
    CSS 组和选择器
    CSS 引入方式
  • 原文地址:https://www.cnblogs.com/zykykyk/p/9454604.html
Copyright © 2020-2023  润新知