【一天一DP计划】概率期望DP

##换教室

floyd三看:

  • dis[u][v]=dis[v][u]=min(dis[u][v],w)
  • mem了dis后,rep(i,1,点的个数)dis[i][i]=0
/*
debug:
    注意读题啊……是双向通行的
reference:
    ccf提高篇P279
Date:
    2019.10.07
sol:

*/
const int N=2e3+10;
int n,m,v,e;
int c[N],d[N];
double k[N],f[N][N][2];
int dis[310][310];

int main(){
    #ifdef WIN32
    freopen("huanjiaoshi.txt","r",stdin);
    #endif
    rd(n),rd(m),rd(v),rd(e);
    rep(i,1,n)rd(c[i]);rep(i,1,n)rd(d[i]);rep(i,1,n)scanf("%lf",&k[i]);
    mem(dis,0x3f);
    rep(i,1,v)dis[i][i]=0;
    rep(i,1,e){
        int u,v,w;rd(u),rd(v),rd(w);
        dis[u][v]=dis[v][u]=min(dis[u][v],w);///////////////////////无向边!!!
    }
    rep(kk,1,v)
        rep(i,1,v)
            rep(j,1,v)
                dis[i][j]=min(dis[i][j],dis[i][kk]+dis[kk][j]);
    rep(i,1,n)
        rep(j,0,m)
            f[i][j][0]=f[i][j][1]=1.0*1e9;
    f[1][0][0]=f[1][1][1]=0;
    rep(i,2,n){
        rep(j,0,min(i,m)){
            //第i节课不申请
            f[i][j][0]=min(f[i][j][0],
                f[i-1][j][1]+k[i-1]*dis[d[i-1]][c[i]]+(1.0-k[i-1])*dis[c[i-1]][c[i]]);
            f[i][j][0]=min(f[i][j][0],
                f[i-1][j][0]+dis[c[i-1]][c[i]]);
            //第i节课要申请
            if(j>0){//得保证有上一堂课
                f[i][j][1]=min(f[i][j][1],
                    f[i-1][j-1][0]+k[i]*dis[c[i-1]][d[i]]+(1.0-k[i])*dis[c[i-1]][c[i]]);
                f[i][j][1]=min(f[i][j][1],
                    f[i-1][j-1][1]+
                    k[i-1]*k[i]*dis[d[i-1]][d[i]]+
                    k[i-1]*(1.0-k[i])*dis[d[i-1]][c[i]]+
                    (1.0-k[i-1])*k[i]*dis[c[i-1]][d[i]]+
                    (1.0-k[i-1])*(1.0-k[i])*dis[c[i-1]][c[i]]);
            }
        }
    }
    double ans=1e9*1.0;
    rep(i,0,m)
        ans=min(ans,min(f[n][i][0],f[n][i][1]));
    printf("%.2lf",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/sjsjsj-minus-Si/p/11634646.html

时间: 2024-10-29 15:19:57

【一天一DP计划】概率期望DP的相关文章

【BZOJ-1419】Red is good 概率期望DP

1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Discuss] Description 桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元.可以随时停止翻牌,在最优策略下平均能得到多少钱. Input 一行输入两个数R,B,其值在0到5000之间 Output 在最优策略下平均能得到多少钱

CF148D--Bag of mice+概率期望dp

第一道概率期望dp:) 其实和一般的dp也差不多,只要状态选好就行了. 定义dp[i][j]表示还剩i只白老鼠j只黑老鼠时候公主赢得概率. 则:1.公主选白老鼠,直接赢,概率:i/(i+j) 2.公主选黑老鼠 1)龙选黑老鼠,逃走黑老鼠:概率:j/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2) 2)  龙选黑老鼠,逃走白老鼠:概率:j/(i+j)*(j-1)/(i+j-1)*i/(i+j-2) 3) 龙选白老鼠,这样公主是必输的,不用考虑 然后dp[i][j]等于以上概率之和

Codeforces - 1264C - Beautiful Mirrors with queries - 概率期望dp

一道挺难的概率期望dp,花了很长时间才学会div2的E怎么做,但这道题是另一种设法. https://codeforces.com/contest/1264/problem/C 要设为 \(dp_i\) 表示第 \(i\) 个格子期望经过多少次,所以 \(dp_{n+1}=1\). https://www.cnblogs.com/suncongbo/p/11996219.html 原文地址:https://www.cnblogs.com/KisekiPurin2019/p/12063633.ht

Codeforces 908 D.New Year and Arbitrary Arrangement (概率&期望DP)

题目链接:New Year and Arbitrary Arrangement 题意: 有一个ab字符串,初始为空. 用Pa/(Pa+Pb)的概率在末尾添加字母a,有 Pb/(Pa+Pb)的概率在末尾添加字母b,当出现≥k个ab子串时立即停止添加字母,求最后期望的ab子串个数.(子串ab不要求连续) 例子:当k=1,aab含2个ab,bbabbab时不可能出现的,因为到了bbab就会停止添加字母. 题解: 期望DP DP果然是智商的分界线 orz @.@#,这题题意其实我也没看太懂,后来看了别人

LightOJ 1030 Discovering Gold (概率/期望DP)

题目链接:LightOJ - 1030 Description You are in a cave, a long cave! The cave can be represented by a \(1 \times N\) grid. Each cell of the cave can contain any amount of gold. Initially you are in position \(1\). Now each turn you throw a perfect \(6\) s

hdu4405--Aeroplane chess+概率期望dp

首先推荐一篇很好的如何概率期望问题的入门文章:点击打开链接 昨天比赛的时候面对这道题的第一想法是依照数学期望的定义来做,即依次求出某个点扔i次骰子能到达n点的概率,然后由期望的定义就可以求出答案了.但显然这在程序上是不可能实现的. 今天看了那篇文章后才知道自己的想法是大错特错的;求解这种问题应该采用一种递推的思路,即每次只考虑一次转移后当前状态的期望,然后我们依次考虑每个节点就可以得到一个方程组,然后就只需要求解这个方程组就行了. 当然对于如何求解这个方程组,我们可以采用高斯消元法,当然如果这个

【一天一DP计划】数位dp

入坑之好博 一本通 数位DP 浅谈数位DP ## P4127 同类分布 现在关键的问题是:怎样记录dp状态? 这里 st可达到 1e18 显然是不能作为dp转移的下标直接记录的 所以我们考虑取模 我们最理想的模数当然是把每次搜到最后得到的数字各个位数之和 但是我们发现在这个过程中 sum是发生变化的 所以我们就应该以一个定值作为模数 那好,我们虽然不知道最后各位之和的结果,我们枚举总可以吧 我们只需要枚举所有的各位数字之和作为模数 最后判断 sum 和枚举的 mod相等并且 st%sum=0 的

【POJ 2096】Collecting Bugs 概率期望dp

题意 有s个系统,n种bug,小明每天找出一个bug,可能是任意一个系统的,可能是任意一种bug,即是某一系统的bug概率是1/s,是某一种bug概率是1/n. 求他找到s个系统的bug,n种bug,需要的天数的期望. 分析 计算期望E=∑所有可能需要的天数*概率 找到s个系统n种bug,需要最少max(s,n)天,而可能的天数是无穷的,这样计算很复杂,复杂到算不了. 所以考虑dp,期望E=∑(昨天可以转移到现在状态的所有可能的情况的期望+1)*概率=∑(昨天可以转移到现在状态的所有可能的情况的

【xsy1528】azelso - 概率期望dp

北京集训的题都是好题啊~~(于是我爆0了) 注意到一个重要的性质就是期望是线性的,也就是说每一段的期望步数可以直接加起来,那么dp求出每一段的期望就行了... 设$f_i$表示从$i$出发不回到$i$直接到达终点的概率,显然期望步数就是$\frac{1}{f_i}$: 考虑转移,设下一个事件概率为$p$,则 如果下一个事件是敌人:$f_i=f_{i+1}*p$ 如果下一个事件是旗子:$f_i=(1-p)*(1-f_{i+1})*(1+p*(1-f_{i+1})+p^2*(1-f_{i+1})^2