zoukankan      html  css  js  c++  java
  • Codeforces Round #253 (Div. 2) D题

    题目大意是选出一个其他不选,问问最大概率;

    刚开始想到DP:F[I][J][0]:表示从 前I个中选出J个的最大值,

    然后对于F[I][J][1]=MAX(F[I-1][J][1],F[I-1][J-1][0]*A[I]+F[I-1][J-1][1]*(1-A[I]));

    但是这是错误的因为F[I-1][J-1][0]和F[I-1][J-1][1]不一定对应相同的数。//我错了,可以DP

    先来公式:

                

        double temp=f[i-1][j-1][0]*p[i]+f[i-1][j-1][1]*(1-p[i]);
        if (temp<f[i-1][j][1]) {f[i][j][1]=f[i-1][j][1];f[i][j][0]=f[i-1][j][0];}
        else f[i][j][1]=temp,f[i][j][0]=f[i-1][j-1][0]*(1-p[i]);

         当f[I][J][0] 随着F[I][J][1]变化时就可以满足,

        因为我们求的是F[I][J][1]的最大值。 注意我们F[I][J][1]和F[I][J][0]所选的数应该是一致的,所以当F[I][J][1]满足最大时,F[I][J][0]只需要跟着变化就可以了。

       

    暴力做法:

    先排序;

    假如从1个中选,就选最大,

    假如从2个中选,就在A[1],A[2](排好序了)中选 

    证明:http://codeforces.com/blog/entry/12739

    CF上的题解

    大概是:证明在这组中加一个数,那到底解概率大的好还是概率小的更优,

               结论证明是先加大的情况更优。

               证明着实是搞数学竞赛的人才能想出来 

  • 相关阅读:
    Spring----Day03
    Spring----Day02
    python
    python
    python
    python
    python
    python
    python
    python
  • 原文地址:https://www.cnblogs.com/forgot93/p/3801531.html
Copyright © 2011-2022 走看看