闯关游戏

#include<bits/stdc++.h>
using namespace std;
const int N=2000+3;
double f[N][2*N];
double g[N][2*N];
struct node{
    int x,int y;
    bool friend operator <(node a,node b){
        return a.y<b.y;
    }
}a[N];
int n,m;
double ans=0.0;
double sum[N];
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d%d",&a[i].x,&a[i].y);
    }
    for(int i=)//处理后缀期望和 
    sort(a+1,a+n+1);
    g[0][0]=1.0;
    f[0][0]=0.0;
    for(int i=1;i<=n;i++){
        for(int j=i;j<=2*n;j++){
            if(j>=2) f[i][j]=g[i-1][j-2]*((double)a[i].y/((double)a[i].x+(double)a[i].y))*(f[i-1][j-2]+((double)1000-(double)a[i].x)/((double)a[i].x+(double)a[i].y))+
                             g[i-1][j-1]*((double)a[i].x/((double)a[i].x+(double)a[i].y))*(f[i-1][j-1]+((double)1000-(double)a[i].y)/((double)a[i].x+(double)a[i].y))
            else f[i][j]=g[i-1][j-1]*((double)a[i].x/((double)a[i].x+(double)a[i].y))*(f[i-1][j-1]+((double)1000-(double)a[i].y)/((double)a[i].x+(double)a[i].y));                 
            
            if(j>=2) g[i][j]=g[i-1][j-2]*((double)a[i].y/((double)a[i].x+(double)a[i].y))+g[i-1][j-1]*((double)a[i].x/((double)a[i].x+(double)a[i].y));
            else g[i][j]=g[i-1][j-1]*((double)a[i].x/((double)a[i].x+(double)a[i].y));
            
            if()//如果后面必须选择2个 
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/Miracevin/p/9556060.html