zoukankan      html  css  js  c++  java
  • hdu 4405 Aeroplane chess 概率dp

    传送门

    给0-n这么多个格子, 初始在0, 然后扔骰子, 扔到几就走几步, 其中有些格子是相连的, 比如2,5相连, 那么到2就可以直接飞到5。 问到n处的期望步数。

    首先肯定是倒着推的, dp[n] = 0. 然后如果x, y(x<y)相连, 那么dp[x] = dp[y]。转移方程很好写。具体见代码

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define mem(a) memset(a, 0, sizeof(a))
     4 double dp[100005];
     5 int num, f[100005], vis[100005];
     6 int main()
     7 {
     8     int n, m, x, y;
     9     while(cin>>n>>m) {
    10         if(n+m==0)
    11             break;
    12         mem1(f);
    13         while(m--) {
    14             scanf("%d%d", &x, &y);
    15             f[x] = y;
    16         }
    17         mem(dp);
    18         mem(vis);
    19         dp[n] = 0;
    20         for(int i = n-1; i>=0; i--) {
    21             if(~f[i]) {
    22                 dp[i] = dp[f[i]];
    23             } else {
    24                 for(int j = 1; j<=6; j++) {
    25                     dp[i] += (1+dp[i+j])/6.0;
    26                 }
    27             }
    28         }
    29         printf("%.4f
    ", dp[0]);
    30     }
    31 }
  • 相关阅读:
    学期总结
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    作业02
    c语言 学习笔记之二 选择题2
  • 原文地址:https://www.cnblogs.com/yohaha/p/5015738.html
Copyright © 2011-2022 走看看