[51NOD1450]闯关游戏:期望DP

分析:

一道比较毒瘤的期望DP,记得要排序。

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cctype>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN=2005;
int n,m;
double f[MAXN][MAXN<<1];
struct LittleGame{
    double o,t;
    friend bool operator < (LittleGame x,LittleGame y){
        return x.t>y.t;
    }
}a[MAXN];
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%lf%lf",&a[i].o,&a[i].t);
    sort(a+1,a+n+1);
    m-=n;
    for(int i=1;i<=m;i++) f[0][i]=1e9;
    for(int i=1;i<=n;i++){
        f[i][0]=1000.0/(a[i].o+a[i].t)+f[i-1][0];
        for(int j=1;j<=m;j++)
            f[i][j]=min(1000.0/(a[i].o+a[i].t)+a[i].o/(a[i].o+a[i].t)*f[i-1][j]+a[i].t/(a[i].o+a[i].t)*f[i-1][j-1],1000.0/a[i].t+f[i-1][j-1]);
    }
    printf("%.10lf\n",f[n][m]);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/ErkkiErkko/p/9649626.html