• lightoj1030(期望dp)


    有n个格子,初始的时候pos=1,然后丢骰子,然后新的pos为pos+骰子的点数,走到新的pos,可以捡走该pos上的黄金。

    特殊的是,如果新的pos超过了n,那么是不会走的,要重新丢骰子。

    所以要分当前的位置丢骰子后是不是会超过n来考虑

    以第三个样例解释

    dp[3] = 9

    dp[2] = 1/6*dp[3] + 5/6*dp[2]

    然后算出dp[2]后再加上a[2]

    同理,dp[1] = 1/6*dp[3]+1/6*dp[2]+4/6*dp[1]

    算出dp[1]后,加上a[1]

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 #include <algorithm>
     5 #include <iostream>
     6 #include <queue>
     7 #include <stack>
     8 #include <vector>
     9 #include <map>
    10 #include <set>
    11 #include <string>
    12 #include <math.h>
    13 using namespace std;
    14 #pragma warning(disable:4996)
    15 #pragma comment(linker, "/STACK:1024000000,1024000000")
    16 typedef __int64 LL;                   
    17 const int INF = 1<<30;
    18 /*
    19 
    20 */
    21 const int N = 100 + 10;
    22 double dp[N];
    23 int a[N];
    24 int main()
    25 {
    26     int t, n;
    27     scanf("%d", &t);
    28     for (int k = 1; k <= t; ++k)
    29     {
    30         scanf("%d", &n);
    31         for (int i = 1; i <= n; ++i)
    32             scanf("%d", &a[i]);
    33         dp[n] = a[n];
    34         for (int i = n - 1; i >= 1; --i)
    35         {
    36             double tmp = 0;
    37             for (int j = i + 1; j <= n &&j - i <= 6; ++j)
    38                 tmp += dp[j] / 6;
    39             if (n - i < 6)
    40             {
    41                 tmp *= 6 / (double)((n - i));
    42             }
    43             dp[i] = tmp + a[i];
    44         }
    45         printf("Case %d: %.6lf
    ",k, dp[1]);
    46     }
    47     return 0;
    48 }
    View Code
  • 相关阅读:
    LeetCode: 18. 4Sum
    LeetCode:15. 3Sum
    Leetcode:1. Two Sum
    tensorflow placeholder
    Tensorflow变量
    13.git的简单使用
    13.Django1.11.6文档
    12.python进程协程异步IO
    12.Flask-Restful
    12.Django思维导图
  • 原文地址:https://www.cnblogs.com/justPassBy/p/4744436.html
Copyright © 2020-2023  润新知