码迷,mamicode.com
首页 > 其他好文 > 详细

亚瑟王

时间:2016-01-01 21:06:49      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

神一般的DP,f[i][j]表示前i张牌,还剩j轮的概率

对于第i张,如果它在后j轮中都没有被出出去,则有f[i+1][j]<--f[i][j]*(1-p[i])^j

如果它被出出去了,则有f[i+1][j-1]<--f[i][j]*(1-(1-p[i])^j)

边界条件f[0][r]=1

由于f[i][ ]只对f[i+1][ ]有影响,所以转移的顺序无所谓,但由于我们有对(1-p[i])^j的计算,所以j:1-->r会比较快,233

技术分享
 1     #include<bits/stdc++.h>
 2     using namespace std;
 3     double f[250][150],p[250];
 4     int d[250];
 5     int main(){
 6         int T;
 7         scanf("%d",&T);
 8         while(T--){
 9             int n,r;
10             scanf("%d%d",&n,&r);
11             for(int i=1;i<=n;i++)
12                 scanf("%lf%d",&p[i],&d[i]);
13             memset(f,0,sizeof(f));
14             f[1][r]=1;
15             double ans=0;
16             for(int i=1;i<=n;i++){
17                 double pw=1;
18                 for(int j=1;j<=r;j++){
19                     pw*=1-p[i];
20                     f[i+1][j]+=f[i][j]*pw;
21                     f[i+1][j-1]+=f[i][j]*(1-pw);
22                     ans+=f[i][j]*(1-pw)*d[i];
23                 }   
24             }
25             printf("%.10lf\n",ans);
26         }
27         return 0;
28     }
29 
View Code

 

亚瑟王

标签:

原文地址:http://www.cnblogs.com/Ngshily/p/5093713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!