题目链接:So you want to be a 2n-aire? UVA - 10900
题目大意:输入n表示有n道题目,t表示每道题答对的概率再t-1之间。初始奖金为1,面对题目,若选择不答题,则可以拿到当前的奖金走人,若选择答题,答对则奖金翻倍,否则奖金清零。求最终获得奖金的期望的最大值。
#include <iostream>
#include <cstdio>
using namespace std;
const int N=30+5;
double d[N];
double t,p;
int main()
{
int n;
while(~scanf("%d%lf",&n,&t)&&(n||t))
{
d[n]=1<<n;
for(int i=n-1;i>=0;i--)
{
p=max(t,(1<<i)/d[i+1]);
d[i]=(1<<i)*(p-t)/(1-t)+(1+p)/2*d[i+1]*(1-p)/(1-t);
}
printf("%.3lf\n",d[0]);
}
return 0;
}