hdu4815 多少分能使获胜概率达到p?

n个题目,每一道都有对应的分值,猴子做对每道题目概率为0.5,老虎要做多少分能使获胜概率达到p?

dp[i][j]表示猴子在做完前i题得到j分的概率,则dp[n][i]表示做完n道题目得到j分的概率,这样求dp[n][i]的前缀和即为猴子得分在i及以下的概率了==

老虎要获胜概率达到p,那么只要看i最少多少能使前缀和>=p,得分为i

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 double dp[45][45*1005];
 6 int a[45];
 7 int main()
 8 {
 9   int T,n,i,j,sum;
10   double p;
11   scanf("%d",&T);
12   while (T--)
13   {
14     scanf("%d%lf",&n,&p);
15     sum=0;
16     memset(dp,0,sizeof(dp));
17     for (i=1;i<=n;i++)
18     {
19       scanf("%d",&a[i]);
20       sum+=a[i];
21     }
22     dp[0][0]=1.0;
23     for (i=1;i<=n;i++)
24       for (j=0;j<=sum;j++)
25       {
26         dp[i][j]=dp[i-1][j]*0.5;
27         if (j>=a[i]) dp[i][j]+=dp[i-1][j-a[i]]*0.5;
28       }
29     for (i=1;i<=sum;i++) dp[n][i]+=dp[n][i-1];
30     for (i=0;i<=sum;i++)
31       if (dp[n][i]>=p) {
32         printf("%d\n",i);
33         break;
34       }
35   }
36   return 0;
37 }
View Code

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4815

posted on 2015-02-09 01:15  xiao_xin  阅读(126)  评论(0编辑  收藏  举报

导航