zoukankan      html  css  js  c++  java
  • luogu_P1850 换教室

    期望概率,式子毒瘤

    要弗洛伊德初始化,有重边(最后才看到,调了好久

    #include<iostream>
    #include<cstdio>
    
    #define ri register int
    #define u int
    
    namespace opt {
    
        inline u in() {
            u x(0),f(1);
            char s(getchar());
            while(s<'0'||s>'9') {
                if(s=='-') f=-1;
                s=getchar();
            }
            while(s>='0'&&s<='9') {
                x=(x<<1)+(x<<3)+s-'0';
                s=getchar();
            }
            return x*f;
        }
    
    }
    
    using opt::in;
    
    #define NN 90005
    
    #include<cstring>
    
    namespace mainstay {
    
        u N,M,V,E,c[2005],d[2005],a[305][305];
    
        double p[2005],f[2][90005][2];
    
        inline void solve() {
            scanf("%d%d%d%d",&N,&M,&V,&E);
            for(ri i(1); i<=N; ++i) scanf("%d",&c[i]);
            for(ri i(1); i<=N; ++i) scanf("%d",&d[i]);
            for(ri i(1); i<=N; ++i) scanf("%lf",&p[i]);
            std::memset(a,0x3f,sizeof(a));
            for(ri i(1); i<=E; ++i) {
                u _a,_b,_c;
                scanf("%d%d%d",&_a,&_b,&_c);
                a[_a][_b]=a[_b][_a]=std::min(a[_a][_b],_c);
            }
            for(ri i(1); i<=V; ++i) a[i][i]=0;
            for(ri t(1); t<=V; ++t) {
                for(ri i(1); i<=V; ++i) {
                    for(ri j(1); j<=V; ++j) {
                        a[i][j]=std::min(a[i][t]+a[t][j],a[i][j]);
                    }
                }
            }
            for(ri i(0); i<=M; ++i) f[0][i][0]=f[0][i][1]=f[1][i][0]=f[1][i][1]=9999999999999.99;
            f[1][1][1]=f[1][0][0]=0;
            for(ri i(2); i<=N; ++i) {
                u now(i&1),pre(i&1^1);
                for(ri j(0); j<=M&&j<=i; ++j) {
                    f[now][j][0]=std::min(f[pre][j][1]+p[i-1]*a[d[i-1]][c[i]]+(1-p[i-1])*a[c[i-1]][c[i]],f[pre][j][0]+a[c[i-1]][c[i]]);
                    if(j-1>=0) f[now][j][1]=std::min(f[pre][j-1][1]+p[i]*p[i-1]*a[d[i-1]][d[i]]+p[i]*(1-p[i-1])*a[c[i-1]][d[i]]+(1-p[i])*p[i-1]*a[d[i-1]][c[i]]+(1-p[i])*(1-p[i-1])*a[c[i-1]][c[i]],f[pre][j-1][0]+p[i]*a[c[i-1]][d[i]]+(1-p[i])*a[c[i-1]][c[i]]);
                }
            }
            double ans(999999999999.99);
            for(ri i(0); i<=M; ++i) ans=std::min(ans,std::min(f[N&1][i][0],f[N&1][i][1]));
            printf("%.2f",ans);
        }
    
    }
    
    int main() {
    
        //freopen("x.txt","r",stdin);
        //freopen("my.txt","w",stdout);
        mainstay::solve();
    
    }
  • 相关阅读:
    Failed to convert WOFF 2.0 font to SFNT 字体图标显示不出来
    每日一字:困
    每日一字:biáng
    sqlserver数据类型简记
    每日一字:天
    可以作为今生目标的一句话
    每日一字:惑
    [转载]优秀程序员的12中能力
    每日一字:怒
    [转载]像树一样活着
  • 原文地址:https://www.cnblogs.com/ling-zhi/p/11849356.html
Copyright © 2011-2022 走看看