BZOJ4008/HNOI2015 亚瑟王(期望dp)
2016-03-05 23:07
513 查看
思路:
这题好难。
主要是状态方程难以设计。
本来是想每个人每一轮单独算贡献
最后看题解才知道可以每个人所有的轮数一起转移
f[i][j]表示到i个人,还有j轮没有打出牌的概率
答案也就可以统计了 具体看代码吧
这题好难。
主要是状态方程难以设计。
本来是想每个人每一轮单独算贡献
最后看题解才知道可以每个人所有的轮数一起转移
f[i][j]表示到i个人,还有j轮没有打出牌的概率
答案也就可以统计了 具体看代码吧
/************************************************************** Problem: 4008 User: DtenSherlock Language: C++ Result: Accepted Time:2928 ms Memory:1528 kb ****************************************************************/ #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<cstring> #include<string> using namespace std; const int imax=229; const int kmax=132+9; int T,n,m; double p[imax],d[imax]; double f[imax][kmax]; int main() { scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%lf%lf",&p[i],&d[i]); memset(f,0,sizeof(f)); f[0][m]=1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) f[i][j]=f[i-1][j]*pow(1-p[i-1],j)+f[i-1][j+1]*(1.0-pow(1-p[i-1],j+1)); double ans=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) ans+=f[i][j]*(1.0-pow(1-p[i],j))*d[i]; printf("%.10lf\n",ans); } return 0; }
相关文章推荐
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- LFC1.0.0 版本发布
- Android px、dp、sp之间相互转换
- HP data protector软件学习1--基本角色与基本工作流程
- HP data protector软件学习2--软件组成与界面介绍
- android中像素单位dp、px、pt、sp的比较
- Android对px和dip进行尺寸转换的方法
- Android根据分辨率进行单位转换-(dp,sp转像素px)
- android 尺寸 dp,sp,px,dip,pt详解
- DP问题各种模型的状态转移方程
- POJ-1695-Magazine Delivery-dp
- nyoj-1216-整理图书-dp
- TYVJ1193 括号序列解题报告
- 对DP的一点感想
- TYVJ上一些DP的解题报告
- soj1005. Roll Playing Games
- 01背包问题
- LeetCode之Maximum Product Subarray
- DP Flow