hdu 4089 Activation(概率dp)

来源:互联网 发布:宝宝哭声辨别软件 编辑:程序博客网 时间:2024/04/30 21:02

莫名其妙的内存超了。。。。

/**转自kuangbin概率DP;设dp[i][j]表示i个人排队,Tomato排在第j个位置,达到目标状态的概率(j<=i)dp[n][m]就是所求j==1:    dp[i][1]=p1*dp[i][1]+p2*dp[i][i]+p4;2<=j<=k: dp[i][j]=p1*dp[i][j]+p2*dp[i][j-1]+p3*dp[i-1][j-1]+p4;k<j<=i:  dp[i][j]=p1*dp[i][j]+p2*dp[i][j-1]+p3*dp[i-1][j-1];化简:j==1:    dp[i][1]=p*dp[i][i]+p41;2<=j<=k: dp[i][j]=p*dp[i][j-1]+p31*dp[i-1][j-1]+p41;k<j<=i:  dp[i][j]=p*dp[i][j-1]+p31*dp[i-1][j-1];其中:p=p2/(1-p1);p31=p3/(1-p1)p41=p4/(1-p1)可以循环i=1->n 递推求解dp[i].在求解dp[i]的时候dp[i-1]就相当于常数了。在求解dp[i][1~i]时等到下列i个方程j==1:   dp[i][1]=p*dp[i][i]+c[1];2<=j<=k:dp[i][j]=p*dp[i][j-1]+c[j];k<j=i:  dp[i][j]=p*dp[i][j]+c[j];其中c[j]都是常数了。上述方程可以解出dp[i]了。首先是迭代得到 dp[i][i].然后再代入就可以得到所有的dp[i]了。注意特判一种情况。就是p4<eps时候,就不会崩溃了,应该直接输出0*/#include<iostream>#include<math.h>#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>using namespace std;//typedef __int64 lld;#define oo 0x3f3f3f3f#define Mod 1000000007#define maxn 2020#define Exp 1e-5double dp[maxn][maxn];double c[maxn];double P[maxn];int main(){    double p1,p2,p3,p4;    int N,M,K;    while(scanf("%d %d %d %lf %lf %lf %lf",&N,&M,&K,&p1,&p2,&p3,&p4)!=EOF)    {        if(p4<Exp)        {            printf("0.00000\n");            continue;        }        double p=p2/(1.0-p1);        double p41=p4/(1.0-p1);        double p31=p3/(1.0-p1);        P[0]=1.0;        for(int i=1;i<=N;i++)            P[i]=P[i-1]*p;        dp[1][1]=p41/(1.0-p);        c[1]=p41;        for(int i=1;i<=N;i++)        {            for(int j=2;j<=K;j++)                c[j]=p31*dp[i-1][j-1]+p41;            for(int j=K+1;j<=i;j++)                c[j]=p31*dp[i-1][j-1];            double temp=c[1]*P[i-1];            for(int j=2;j<=K;j++)                temp+=c[j]*P[i-j];            for(int j=K+1;j<=i;j++)                temp+=c[j]*P[i-j];            dp[i][i]=temp/(1.0-P[i]);            dp[i][1]=p*dp[i][i]+c[1];            for(int j=2;j<i;j++)                dp[i][j]=p*dp[i][j-1]+c[j];        }        printf("%.5lf\n",dp[N][M]);    }    return 0;}


0 0
原创粉丝点击