HDU 5781 ATM Mechine(概率dp)

http://acm.split.hdu.edu.cn/showproblem.php?pid=5781

题意:

Alice要去取钱,可是她忘记有多少钱了,只知道在[0,k]的范围之内,她每次可以选择取y的钱,如果y超过了她的存款,那么就会警告,警告w次的话就会被抓走,问在最多警告w次的情况下取出钱的最小期望次数。

 

思路:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<vector>
 6 #include<stack>
 7 #include<queue>
 8 #include<cmath>
 9 #include<map>
10 #include<set>
11 using namespace std;
12 typedef long long ll;
13 typedef pair<int,int> pll;
14 const int INF = 0x3f3f3f3f;
15 const int maxn = 2000 + 5;
16 
17 int k,w;
18 double dp[maxn][20];
19 
20 int main()
21 {
22     //freopen("in.txt","r",stdin);
23     for(int i=1;i<=2000;i++)  dp[i][0]=INF;
24     for(int i=0;i<20;i++)  dp[0][i]=0;
25     for(int i=1;i<maxn;i++)
26     {
27         for(int j=1;j<20;j++)
28         {
29             dp[i][j]=INF;
30             for(int k=1;k<=i;k++)
31                 dp[i][j]=min(dp[i][j],(i-k+1.0)/(i+1)*dp[i-k][j]+k/(i+1.0)*dp[k-1][j-1]+1);
32         }
33 
34     }
35     while(~scanf("%d%d",&k,&w))
36     printf("%.6f\n",dp[k][min(w,11)]);
37     return 0;
38 }

 

posted @ 2017-10-13 14:59  Kayden_Cheung  阅读(152)  评论(0编辑  收藏  举报
//目录