zoj 3640 Help Me Escape(概率DP)
来源:互联网 发布:js indexof 第一个 编辑:程序博客网 时间:2024/06/05 05:30
题目意思: 一个吸血鬼,每天有n条路走,每次随机选一条路走,每条路有限制,如果当这个吸血鬼的能力大于某个值c[i],那么只需要花费ti(ti = (1.0 + sqrt(5.0))/2 * c[i] * c[i]) 天的时间就可以逃出去,否则,花费1天的时间,吸血鬼的能力增加c[i],花费1天的时间,然后继续下一天的尝试。求逃出去的期望。
设dp[v] ,表示当能力值为v的时的期望。所以方程很容易写了,dp[v] = sum{ ti/n }(v直接逃出去) + sum { (1 + dp[v + c[i]])/n }(下一次逃出去) ;对于路i,如果v大于路i的限制,那么就能够用ti逃出去,概率为{1/n}否则只能进入下一天的尝试,所以需要用的时间为dp[v + c[i]] + 1 ,概率为{1/n}; 直接使用记忆化搜索的方式写。
#include<iostream>#include<cstdio>#include<string.h>#include<math.h>using namespace std;#define N 20005double dp[N],t;int c[105],n,f;double dfs(int v){ int i,j; if(dp[v]>0) return dp[v]; for(i=0;i<n;i++) { if(v>c[i]) { dp[v]=dp[v]+int(t*c[i]*c[i])*1.0/n; } else { dp[v]=dp[v]+(1+dfs(v+c[i]))*1.0/n; } } return dp[v];}int main(){ int i,j; t=(1.0+sqrt(5.0))/2.0; while(~scanf("%d%d",&n,&f)) { memset(dp,0,sizeof(dp)); for(i=0;i<n;i++) scanf("%d",&c[i]); printf("%.3lf\n",dfs(f)); } return 0;}
- ZOJ 3640 Help Me Escape 概率DP
- 概率dp ZOJ 3640 Help Me Escape
- zoj 3640 Help Me Escape(概率dp)
- ZOJ 3640 Help Me Escape(概率dp)
- zoj-3640-Help Me Escape-概率DP
- ZOJ - 3640 Help Me Escape(概率dp)
- ZOJ 3640 Help Me Escape 概率dp
- ZOJ 3640 Help Me Escape (概率DP)
- zoj 3640 Help Me Escape(概率DP)
- ZOJ 3640 Help Me Escape [概率DP]
- zoj 3640 Help Me Escape(概率DP)
- zoj 3640 Help Me Escape (概率dp)
- zoj 3640 Help Me Escape(概率dp[记忆搜索])
- zoj 3640 Help Me Escape(概率DP基础)
- ZOJ 3640 Help Me Escape(概率dp+记忆化)
- ZOJ-3640 Help Me Escape (概率DP)
- zoj 3640 Help Me Escape (概率与期望DP)
- ZOJ 3640 Help Me Escape(概率-期望DP+神坑)
- 正则表达式(javascript)学习总结
- DOM
- android 播放音效 小例子
- [leetcode] Binary Tree Zigzag Level Order Traversal
- 尚学堂马士兵servlet/JSP笔记(四、JSP)
- zoj 3640 Help Me Escape(概率DP)
- 由树的前序遍历,中序遍历建立一颗二叉树,并以后续遍历的方式输出其元素
- Handler
- HDU2037 今年暑假不AC 贪心
- discuzX3.0 伪静态Apache和IIS环境下的文件配置
- elastix2.0 安装图形界面
- [leetcode] Construct Binary Tree from Preorder and Inorder Traversal
- 网络流EK算法
- android Camera里面的问题:fail to connect to Camera service