• 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 }
  • 相关阅读:
    06_springboot热部署
    05_springboot多配置文件
    04_springBoot端口和上下文路径
    03_springboot错误处理.md
    02_springboot部署-jar和-war的方式
    01_idea创建springboot
    Vue学习笔记
    Java使用Swing实现五子棋。
    我的开源项目
    Java常用库和工具类
  • 原文地址:https://www.cnblogs.com/kickit/p/9004523.html
Copyright © 2020-2023  润新知