• 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
  • 相关阅读:
    Spring中的Bean相关问题
    请谈一下spring bean的生命周期
    请谈一谈IOC中的继承和Java中的继承有什么区别
    谈谈你对Spring IOC和DI的理解,以及它们的区别
    Spring中用到了哪些设计模式
    JAVA自学笔记11
    JAVA自学笔记14
    JAVA自学笔记12
    JAVA自学笔记15
    JAVA自学笔记18
  • 原文地址:https://www.cnblogs.com/WABoss/p/5296629.html
Copyright © 2020-2023  润新知