zoukankan      html  css  js  c++  java
  • hdu 4599 Dice 概率DP

    思路:

    1.求f[n];dp[i]表示i个连续相同时的期望

    则 dp[0]=1+dp[1]

        dp[1]=1+(5dp[1]+dp[2])/6

        ……

        dp[i]=1+(5dp[1]+dp[i+1])/6

        ……

        dp[n]=0

    可以求得f[n]=(6^n-1)/5.

    2.求h[n];dp[i]表示i个连续相同的1时的期望

    则 dp[0]=1+(5dp[0]+dp[1])/6

        dp[1]=1+(5dp[0]+dp[2])/6

        ……

        dp[i]=1+(5dp[0]+dp[i+1])/6

        ……

        dp[n]=0

    可以求得h[n]=(6^(n+1)-6)/5.

    3.求g[m];dp[i]表示i个1时的期望

    则 dp[0]=1+(5dp[0]+dp[1])/6

        dp[1]=1+(5dp[1]+dp[2])/6

        ……

        dp[i]=1+(5dp[i]+dp[i+1])/6

        ……

        dp[n]=0

    可以求得g[m]=6*m.

    这样就有 m1>=(6^n-1)/30;m2>=(6^n-1)/5

    分析易知(6^n-1)/30不能整除,所以m1=(6^n+24)/30 ; m2=(6^n-1)/5 .

    代码如下:

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<algorithm>
     4 #include<iomanip>
     5 #include<cmath>
     6 #include<cstring>
     7 #include<vector>
     8 #define ll __int64
     9 #define M 2011
    10 using namespace std;
    11 ll pows(ll a,ll b,ll mod)
    12 {
    13     ll ans=1;
    14     while(b){
    15         if(b&1) ans=ans*a%mod;
    16         b>>=1;
    17         a=a*a%mod;
    18     }
    19     return ans;
    20 }
    21 int main(){
    22     ll n,m1,m2,p;
    23     ll inv30=pows(30,M-2,M);
    24     ll inv5=pows(5,M-2,M);
    25     while(scanf("%I64d",&n)&&n){
    26         p=pows(6,n,2011);
    27         m1=((p+24)%M+M)%M*inv30%M;
    28         m2=((p-1)%M+M)%M*inv5%M;
    29         printf("%I64d %I64d
    ",m1,m2);
    30     }
    31     return 0;
    32 }
    View Code
  • 相关阅读:
    使用JS实现网页动态换肤
    数据库更新Sql脚本总结
    Javascript无刷新获取当前时间
    ASP.NET将网页设为桌面图标实现
    解决在IE浏览器中resize事件执行多次
    linux编译安装gcc5.3.0
    JAVA抽象类和接口
    JAVA内部类
    推测竞赛中测试集的正负比例
    Codeforces Round #742 (Div. 2) 题解
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3281959.html
Copyright © 2011-2022 走看看