LightOJ - 1030 Discovering Gold 期望
来源:互联网 发布:网站安全扫描软件 编辑:程序博客网 时间:2024/05/16 17:49
题目大意:在一个1*N的格子里,每个格子都有相应的金币数,走到相应格子的话,就会得到该格子的金币。
现在有一个人在1这个位置,手里有一颗色子,色子摇到几,他就前进几步,但有一种情况例外,如果当前位置+色子数 > N,那么他就会重新摇色子。
走到N这个位置的话,意味着游戏结束了。
问游戏结束时,这个人得到金币的期望。
解题思路:这题要倒着推,由N推向1
设dp[k]为到达k这个位置时得到金币的期望,m为该点和N这个位置的距离,gold[k]为k这个位置的金币数,因为走的位置不能超过N,所以要取min(m,6)
那么dp[k] = 1 / min(m,6) * (dp[k + 1] + dp[k+2] + … + dp[min(m,6)]) + gold[k]
#include<cstdio>#include<cmath>#include<algorithm>using namespace std;using namespace std;const int N = 110;int gold[N];double dp[N];int n;double solve() { for(int i = 0; i < n - 1; i++) dp[i] = 0; int step; dp[n-1] = gold[n-1]; for(int i = n - 2; i >= 0; i--) { dp[i] = gold[i]; step = min(6, n-1-i); for(int j = 1; j <= step; j++) dp[i] += 1.0 / step * dp[i+j]; } return dp[0];}int main() { int test, cas = 1; scanf("%d", &test); while(test--) { scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%d", &gold[i]); printf("Case %d: %.7lf\n", cas++, solve()); } return 0;}
0 0
- lightoj 1030 Discovering Gold[ 期望 ]
- LightOJ - 1030 Discovering Gold 期望
- lightoj 1030 - Discovering Gold 【期望】
- LightOJ 1030 Discovering Gold(期望)
- 【期望dp】LightOJ 1030 Discovering Gold
- LightOJ 1030 - Discovering Gold (期望dp)
- LightOJ 1030 Discovering Gold(期望DP)
- 【LightOJ 1030】Discovering Gold(期望DP)
- lightoj 1030 Discovering Gold 概率期望
- 【概率&期望】Discovering Gold LightOJ
- LightOJ 1030 Discovering Gold
- LightOJ 1030-Discovering Gold
- LightOJ 1030 Discovering Gold
- lightoj 1030 Discovering Gold
- lightoj 1030 Discovering Gold
- LightOJ 1030 Discovering Gold
- Lightoj 1030 - Discovering Gold
- LightOj-1030-Discovering Gold
- could not read data from '/Users/iamme/Documents/XCode/myapp/myapp/myapp-Info.plist': The file “myap
- C#中几种换行符
- 用Windows Server 2008搭建时钟同步服务器
- Java代码规范文档
- C# 将 HTML 转成纯文本
- LightOJ - 1030 Discovering Gold 期望
- Search a 2D Matrix
- 编程学习之谈
- lua如何截取中英文混合字符串
- struts2基础(1)
- 控件字体大小随内容变化而变化
- 基于android 社区app短信分享 发送回调事件实现
- jstl的formatNumber标签的四舍五入问题
- android使用隐藏api的方法(使用被@hide的api)