传送门
期望dp好题。
f[i]表示摆放i个的最小花费,于是f[i]可以从f[j]与f[i-j+1]转移过来了。
代码:
#include<bits/stdc++.h>
#define N 1005
using namespace std;
int n;
double L,R,f[N];
inline double min(double a,double b){return a<b?a:b;}
int main(){
while(scanf("%d",&n)&&n){
scanf("%lf%lf",&L,&R);
f[0]=0,f[1]=1.0/(1.0-L-R);
for(int i=2;i<=n;i++){
f[i]=2e9;
for(int j=0;j<i;j++){
f[i]=min(f[i],(f[j]*(1.0-R)+f[i-j-1]*(1.0-L)+1.0)/(1.0-L-R));
}
}
printf("%.2f\n",f[n]);
}
}