zoukankan      html  css  js  c++  java
  • LightOJ1030 Discovering Gold(概率DP)

    题目大概说一个1×n的格子,每个格子都有一定的黄金,起点在1,终点在n,通过投掷6面骰子前进与骰子点数一样的步数,如果会超过n就重新投,每到一个格子就获得其中的黄金。问到达n能得到的黄金数目的期望。

    求概率是正推,求期望是逆推。。容我慢慢体会。。

    期望:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 double d[111];
     6 int main(){
     7     int t,n,a[111];
     8     scanf("%d",&t);
     9     for(int cse=1; cse<=t; ++cse){
    10         scanf("%d",&n);
    11         for(int i=1; i<=n; ++i){
    12             scanf("%d",a+i);
    13         }
    14         memset(d,0,sizeof(d));
    15         d[n]=a[n];
    16         for(int i=n-1; i>=1; --i){
    17             int k=min(6,n-i);
    18             for(int j=1; j<=k; ++j){
    19                 d[i]+=(d[i+j]+a[i])/k;
    20             }
    21         }
    22         printf("Case %d: %f
    ",cse,d[1]);
    23     }
    24     return 0;
    25 }
    View Code

    也可以先求到每个格子的概率,然后概率×黄金数就是期望:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 double d[111];
     6 int main(){
     7     int t,n,a[111];
     8     scanf("%d",&t);
     9     for(int cse=1; cse<=t; ++cse){
    10         scanf("%d",&n);
    11         for(int i=1; i<=n; ++i){
    12             scanf("%d",a+i);
    13         }
    14         memset(d,0,sizeof(d));
    15         d[1]=1;
    16         for(int i=1; i<n; ++i){
    17             int k=min(6,n-i);
    18             for(int j=1; j<=k; ++j){
    19                 d[i+j]+=d[i]/k;
    20             }
    21         }
    22         double res=0;
    23         for(int i=1; i<=n; ++i) res+=d[i]*a[i];
    24         printf("Case %d: %f
    ",cse,res);
    25     }
    26     return 0;
    27 }
    View Code
  • 相关阅读:
    BZOJ 2574: [Poi1999]Store-Keeper
    BZOJ 1024: [SCOI2009]生日快乐
    BZOJ 2541: [Ctsc2000]冰原探险
    hihoCoder 1303 数论六·模线性方程组
    Codeforces 710 D. Two Arithmetic Progressions
    BZOJ 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘
    ZJOI2014 2048
    51Nod 1766 树上的最远点对
    Codeforces 727 F. Polycarp's problems
    BZOJ 3736: [Pa2013]Karty
  • 原文地址:https://www.cnblogs.com/WABoss/p/5296629.html
Copyright © 2011-2022 走看看