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

    题意:

    走棋游戏,投掷1-6的骰子,投到x,就从这个格子向前走x步。

    有些格子有飞机,可以直接飞到更远的格子,也是只能向前飞,每个格子最多有一个飞机。

    到达大于等于n的格子,则游戏结束。

    问从游戏结束时的投掷格子的期望数。

    思路:

    期望一般从后往前dp。

    假设dp[i]表示到i格时还需要投掷的次数,那么dp[n] = 0。

    从n-1逆着dp,那么到一个格子k,如果k有飞机,那么dp[k]就等于dp[flight[k]];

    没有飞机,就累加从这个格子之后的6个格子的期望✖️1/6,再加上这个格子要投掷一次。

    代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 #include <map>
     5 using namespace std;
     6 const int N = 100000 + 10;
     7 double dp[N];
     8 map<int,int> mmp;
     9 int main()
    10 {
    11     int n,m;
    12     while (scanf("%d%d",&n,&m) != EOF && n + m)
    13     {
    14         mmp.clear();
    15         dp[n] = 0;
    16         memset(dp,0,sizeof(dp));
    17         for (int i = 0;i < m;i++)
    18         {
    19             int x,y;
    20             scanf("%d%d",&x,&y);
    21             mmp[x] = y;
    22         }
    23         for (int i = n - 1;i >= 0;i--)
    24         {
    25             if (mmp[i])
    26             {
    27                 dp[i] = dp[mmp[i]];
    28             }
    29             else
    30             {
    31                 double tmp = 0;
    32                 for (int j = 1;j <= 6;j++)
    33                 {
    34                     tmp += dp[i+j] * 1.0 / 6;
    35                 }
    36                 dp[i] = tmp + 1;
    37             }
    38         }
    39         printf("%.4f
    ",dp[0]);
    40     }
    41     return 0;
    42 }
  • 相关阅读:
    Javascript逻辑运算认识
    Javascript基本数据认识
    python爬虫数据提取之bs4的使用方法
    权限和频率组件的使用
    版本控制和认证组件的使用
    drf中View和router的详解
    Serializers组件详解
    REST架构简介
    模型层中QuerySet的学习
    最全总结!聊聊 Python 发送邮件的几种方式
  • 原文地址:https://www.cnblogs.com/kickit/p/9004523.html
Copyright © 2011-2022 走看看