HDU4405(概率DP求期望)
生活随笔
收集整理的這篇文章主要介紹了
HDU4405(概率DP求期望)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:http://acm.hdu.edu.cn/showproblem.php?pid=4405
?
題意:飛行棋,從0到n,置骰子,置到幾就往前走幾步,前進中會有捷徑,比如2和5連到一起了,那你走到2時可以直接跳到
5,如果5和8連到一起了,那你還可以繼續跳到8,最后問跳到n時平均置幾次骰子。也就是求期望。
?
全期望公式:http://zh.wikipedia.org/wiki/%E5%85%A8%E6%9C%9F%E6%9C%9B%E5%85%AC%E5%BC%8F
全概率公式:http://zh.wikipedia.org/wiki/%E5%85%A8%E6%A6%82%E7%8E%87%E5%85%AC%E5%BC%8F
概率期望學習:http://kicd.blog.163.com/blog/static/126961911200910168335852/
?
#include <iostream> #include <string.h> #include <stdio.h>using namespace std; const int N=100005;struct node {int y,next; };bool vis[N]; node path[N]; int first[N],t; double dp[N];void add(int x,int y) {path[t].y=y;path[t].next=first[x];first[x]=t++; }int main() {double s;int n,m,v;while(cin>>n>>m){if(m==0&&n==0) break;memset(dp,0,sizeof(dp));memset(vis,0,sizeof(vis));memset(first,0,sizeof(first));int x,y;t=1;while(m--){cin>>x>>y;add(y,x);}dp[n]=-1;for(int i=n; i>=0; i--){if(!vis[i]){vis[i]=true;s=0;for(int k=1; k<=6; k++)s+=dp[i+k];s/=6;dp[i]+=(s+1);}for(int k=first[i]; k; k=path[k].next){v=path[k].y;dp[v]=dp[i];vis[v]=true;}}printf("%.4lf\n",dp[0]);}return 0; }
?
總結
以上是生活随笔為你收集整理的HDU4405(概率DP求期望)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Fib数模n的循环节
- 下一篇: Treap原理和实现方法