运用记忆化搜解决的概率期望问题
2012-10-07 11:42
197 查看
这个算是脱了很久很久的一片解题报告了。主要是运用动态规划求解期望问题的解法,一般用记忆化搜的写法更好理解。以几个题为例:
UVALive 5811,Card。
题意很简单:一副扑克牌共有13张黑桃,红心,梅花,方片和大小王各一张,input会给出黑桃,红心,梅花,方片的数量。问从随机分布的一堆牌中依次抽取一张牌,达到题中所要求的数量,至少需要抽取牌的期望,如果抽到大小王,则可以把它们当成任意花色,因为要求抽取的牌数最少,所以当然是当成最需要的了。
比赛训练时想了很久,都没有想出来,最后还是看了大牛的代码才略懂一二。主要是用dp值表示期望,记忆化搜直接出解,dp[a][b][c][d][big][small]表示抽取了a张黑桃,b张红心,c张梅花,d张方片,大小王分别当成了big和small(为4表示还没有用过大小王,0表示黑桃,1表示红心,2表示梅花,3表示方片),其他的看代码就知道了
View Code
还有一些用记忆化搜不好求解的题目,也就是直接求解就好了的题~~,比如 URAL - 1776 Anniversary Firework,UVALive - 5721 Activation(这个求递推公式很奇葩,算做数学题一样~)
UVALive 5811,Card。
题意很简单:一副扑克牌共有13张黑桃,红心,梅花,方片和大小王各一张,input会给出黑桃,红心,梅花,方片的数量。问从随机分布的一堆牌中依次抽取一张牌,达到题中所要求的数量,至少需要抽取牌的期望,如果抽到大小王,则可以把它们当成任意花色,因为要求抽取的牌数最少,所以当然是当成最需要的了。
比赛训练时想了很久,都没有想出来,最后还是看了大牛的代码才略懂一二。主要是用dp值表示期望,记忆化搜直接出解,dp[a][b][c][d][big][small]表示抽取了a张黑桃,b张红心,c张梅花,d张方片,大小王分别当成了big和small(为4表示还没有用过大小王,0表示黑桃,1表示红心,2表示梅花,3表示方片),其他的看代码就知道了
View Code
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int maxn = 105; const int inf = (1<<30); const double gold = (1+sqrt(5.0))/2; int c[maxn], n, d[maxn]; double dp[maxn][10005]; double ans; int cal(int c){ return int(gold*c*c); } double dfs(int deep, int f){ int i, j; if(dp[deep][f]>-0.5){ return dp[deep][f]; } double tmp = 0.0; for(i=1;i<=n;i++){ if(f>c[i]){ tmp += (deep+(double)d[i])/n; } else{ tmp += dfs(deep+1,min(f+c[i],10001))/n; } } return dp[deep][f] = tmp; } int main(){ int f, i, j, k, l; while(~scanf("%d%d",&n,&f)){ for(i=1;i<=n;i++){ scanf("%d",&c[i]); d[i] = cal(c[i]); } for(i=0;i<maxn;i++){ for(j=0;j<10005;j++){ dp[i][j] = -1.0; } } c[0] = 0; printf("%.3lf\n",dfs(0,f)); } return 0; }
还有一些用记忆化搜不好求解的题目,也就是直接求解就好了的题~~,比如 URAL - 1776 Anniversary Firework,UVALive - 5721 Activation(这个求递推公式很奇葩,算做数学题一样~)
相关文章推荐
- Alias Method解决随机类型概率问题
- 一个低概率core dump问题的解决------static搞起
- hdu4405 Aeroplane chess【概率DP+期望问题】
- Struts2中的ModelDriven机制及其运用、refreshModelBeforeResult属性解决的问题
- CodeForces 280C 浅谈期望线性性的树上问题实际运用
- 运用波利亚的怎样解题表来解决事件绑定问题
- 运用ORACLE的OO4O类库函数解决调用存储过程向远程数据库上传超过32K图片失败的问题
- HDU 4418 高斯消元解决概率期望
- if语句的运用:用C语言解决奖金发放和出租车费问题。
- 运用插值法解决静态查找问题
- VS2010+QT5编程之巧妙运用定时器解决QTreeView/QTableView等QAbstractItemView实时条目统计问题
- 当层无法运用margin:0 auto居中问题的解决!
- 面试中的概率问题 - 数学期望(2) - 武器升级需要的宝石数
- 运用webkit绘制渲染页面原理解决iscroll4闪动的问题
- lightoj 1408 Batting Practice (概率问题,求期望,推公式)
- 多线程中Join的运用(困惑的经典问题终于解决)
- javascript中运用闭包和自执行函数解决大量的全局变量问题
- 使用Random工具类来解决等概率随机问题
- 解决等概率随机抽样问题
- 用优先级随机概率解决'今天吃神马问题