分析:
一道比较毒瘤的期望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;
}