• 【解题报告】【概率DP入门】 P1850 换教室


    这道题是一道非常基本的期望的题目,我们只需要抓住关键,就是我们递推直接进行DP就可以了,至于我们的最短路部分,因为数据并不是非常的大,所以说我们直接使用弗洛伊德算法即可。然后根据期望的定义,我们使用期望等于概率乘上价值进行计算即可,然后使用刷表法每次判最小进行递推即可。

    因为时间原因我这里不详细讲解,这里有一篇写的非常好的博客推荐给大家。

    链接:NOIP2016换教室

    本人AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e3+5;
    const double inf=0x7fffffff;
    int n,m,v,e,c[N],d[N],mp[305][305];
    double k[N],dp[N][N][2];
    void init()
    {
        memset(mp,63,sizeof(mp));
        scanf("%d%d%d%d",&n,&m,&v,&e);
        for(int i=1;i<=n;++i) scanf("%d",&c[i]);
        for(int i=1;i<=n;++i) scanf("%d",&d[i]);
        for(int i=1;i<=n;++i) scanf("%lf",&k[i]);
        for(int i=1;i<=e;++i)
        {
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            mp[x][y]=mp[y][x]=min(mp[y][x],z);
        }
        for(int k=1;k<=v;++k)
            for(int i=1;i<=v;++i)
                for(int j=1;j<=v;++j)
                mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
        for(int i=1;i<=v;++i) mp[i][i]=mp[i][0]=mp[0][i]=0;
        for(int i=0;i<=n;++i) for(int j=0;j<=m;++j) dp[i][j][0]=dp[i][j][1]=inf;
        dp[1][0][0]=dp[1][1][1]=0;
        
    }
    int main()
    {
        init();
        for(int i=2;i<=n;++i)
        {
            dp[i][0][0]=dp[i-1][0][0]+mp[c[i-1]][c[i]];
            for(int j=1;j<=min(i,m);++j)
            {
                int c1=c[i-1],c2=d[i-1],c3=c[i],c4=d[i];
                dp[i][j][0] = min(dp[i][j][0],min(dp[i-1][j][0]+mp[c1][c3],dp[i-1][j][1]+mp[c1][c3]*(1-k[i-1])+mp[c2][c3]*k[i-1]));
                dp[i][j][1] = min(dp[i][j][1],min(dp[i-1][j-1][0]+mp[c1][c3]*(1-k[i])+mp[c1][c4]*k[i],dp[i-1][j-1][1]+mp[c1][c3]*(1-k[i-1])*(1-k[i])+mp[c1][c4]*(1-k[i-1])*k[i]+mp[c2][c3]*k[i-1]*(1-k[i])+mp[c2][c4]*k[i-1]*k[i]));
            }
        }
        double ans=inf;
        for(int i=0;i<=m;++i)ans=min(ans,min(dp[n][i][0],dp[n][i][1]));
        printf("%.2lf",ans);
        return 0;
    } 
    
  • 相关阅读:
    关于程序员认知和编程学习,没有任何一篇文章会讲得如此透彻
    Found 1 slaves: Use of uninitialized value in printf at /usr/local/percona-toolkit/bin/pt-online-schema-change line 8489
    alert 多语言的处理
    #!/bin/sh & #!/bin/bash区别
    mysql 常用
    java.io.FileNotFoundException
    struts1 & jquery form 文件异步上传
    简单的数据库连接池实例(java语言)
    null id in com.rocky.** entry 错误处理
    java unsupported major.minor version 51.0 解决
  • 原文地址:https://www.cnblogs.com/mudrobot/p/13329336.html
Copyright © 2020-2023  润新知