题目
https://cn.vjudge.net/problem/HDU-5236
题意
一个打字机 在打完一个字后会有p概率坏掉,只能保留之前保存的,保存需要x秒并且期间打字机不会坏掉
问一个人打n个字采取什么策略需要的时间期望最小是多少
思路
期望DP dp[i] = (dp[i-1] + 1) / (1 - p) 打印i个字 = (打印(i-1)个期望时间 + 1)/ (成功概率 即成功需要打印多少次)
然后枚举多少字保存一次
#include <bits/stdc++.h>
using namespace std;
double dp[100005];
int main()
{
int t;
scanf("%d",&t);
int ca = 1;
while(t--)
{
int n,x;
double p;
scanf("%d%lf%d",&n,&p,&x);
for(int i = 1;i <= n;i++)
{
dp[i] = (dp[i-1] + 1) / (1 - p);
}
double ans = 100000000.0;
for(int i = 1;i <= n;i++)
{
int q = n / i;
int w = n % i;
ans = min(ans,dp[q+1]*w + dp[q]*(i-w)+x*i);
}
printf("Case #%d: %f\n",ca++,ans);
}
return 0;
}