先推出F(n)的公式:

设dp[i]为已经投出连续i个相同的点数平均还要都多少次才能到达目标状态。

则有递推式dp[i] = 1/6*(1+dp[i+1]) + 5/6*(1+dp[1]).考虑当前这一次掷色子,有1/ 6的概率投的和前面的一样,有5/6的概率不一样,不一样就要重新投,就到了dp[1]的状态,这里投了一次,所以要加1.边界有dp[0] = dp[1]+1,dp[n] = 0;

可以这么说,H[n]应该是6*F[n]的,随便YY一样。

更严谨的话就是一样要去推,递推式如下,设dp[i]为已经连续i次投出1后平均还要多少次才能达到目标状态。

有递推式dp[i] = 1/6*(dp[i+1]+1) + 5/6*(1+dp[0]).  (这里和上面的公式不一样)。边界条件dp[0] = 1/6*(1+dp[1]) +5/6*(dp[0]+1).dp[n]=0;逆着推就能直接求出dp[0].

推出来的F(n) = (6^n-1)/5,H(n) = 6*(6^n-1)/5.G(m) = 6*m,平均投6次会出现一次1.

或者概率DP,设dp[i]表示已经投出i次1平均还要投多少次才能到达目标状态。

则有dp[i] = 1/6*(1+dp[i+1]) + 5/6*(1+dp[i]).

边界条件dp[m]=0。

然后就得到m1>=(6^n-1)/30,m2>=(6^n-1)/5.显然最小的m2 = (6^n-1)/5

而(6^n-1)%30 !=0,通过观察发现有6%30=6,6*6%30=6,那么就有6^n%30=6也就是说虽然6^n%30 !=0,但是6^n+24%30 == 0,且这就是m1,

即有m1 = (6^n+24)/30.....现在就是求m1%2011,m2%2011,我是用的先算6^n%2011,用快速幂,然后求出分别求出30和5对应2011的逆元。

至于求逆元,用扩展欧几里得算法即可·······甚至用电脑暴力算出也行

贴代码:

 #include<cstdio>
const int mod = ;
const int e1 = ,e2 = ;//30,5的逆元
inline int qPow(int x,int p)
{
int a=,ans=;
while(x)
{
if(x&) ans = ans*a%p;
a = a*a%p;
x >>= ;
}
return ans;
}
int main()
{
// freopen("in.txt","r",stdin);
int n,tmp,tmp1,tmp2,ans1,ans2;
while(scanf("%d",&n),n)
{
tmp = qPow(n,mod);
tmp1 = (tmp++mod)%mod;
tmp2 = (tmp-+mod)%mod;
ans1 = tmp1*e1%mod;
ans2 = tmp2*e2%mod;
printf("%d %d\n",ans1,ans2);
}
return ;
}

HDU 4599 概率DP的更多相关文章

  1. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

  2. hdu 3853 概率dp

    题意:在一个R*C的迷宫里,一个人在最左上角,出口在右下角,在每个格子上,该人有几率向下,向右或者不动,求到出口的期望 现在对概率dp有了更清楚的认识了 设dp[i][j]表示(i,j)到(R,C)需 ...

  3. HDU 4815 概率dp,背包

    Little Tiger vs. Deep Monkey Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K ( ...

  4. hdu 4050(概率dp)

    算是挺简单的一道概率dp了,如果做了前面的聪聪于可可的话,这题不需要什么预处理,直接概率dp就行了... #include <stdio.h> #include <stdlib.h& ...

  5. HDU 4405 (概率DP)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4405 题目大意:飞行棋.如果格子不是飞行点,扔骰子前进.否则直接飞到目标点.每个格子是唯一的飞行起点 ...

  6. hdu 4336 概率dp + 状压

    hdu 4336 小吃包装袋里面有随机赠送一些有趣的卡片,如今你想收集齐 N 张卡片.每张卡片在食品包装袋里出现的概率是p[i] ( Σp[i] <= 1 ), 问你收集全部卡片所需购买的食品数 ...

  7. hdu 4576(概率dp+滚动数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4576 思路:由于每次从某一位置到达另一位置的概率为0.5,因此我们用dp[i][j]表示第i次操作落在 ...

  8. hdu 5001 概率DP 图上的DP

    http://acm.hdu.edu.cn/showproblem.php?pid=5001 当时一看是图上的就跪了 不敢写,也没退出来DP方程 感觉区域赛的题  一则有一个点难以想到 二则就是编码有 ...

  9. hdu 3853LOOPS (概率DP)

    LOOPS Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Total Su ...

随机推荐

  1. limit 百万级数据分页优化方法

    mysql教程 这个数据库教程绝对是适合dba级的高手去玩的,一般做一点1万 篇新闻的小型系统怎么写都可以,用xx框架可以实现快速开发.可是数据量到了10万,百万至千万,他的性能还能那么高吗? 一点小 ...

  2. 基于Lumisoft.NET组件的POP3邮件接收和删除操作

    From: http://www.cnblogs.com/wuhuacong/archive/2013/05/06/3063093.html Lumisoft.NET组件是一个非常强大的邮件发送.邮件 ...

  3. vue js 用nodejs的依赖包 --2016-08-23

     今天被nodejs包依赖坑了一下,上次上传的项目突然运行不起来了,原来是package.json中定义了使用最新版本的依赖,而最新版本有可能调整了结构或者改了api,比如vux把flexbox-it ...

  4. Xutils的使用 转载 带自己细细研究

    单例模式static DbUtils db = null; public static DbUtils getDb(Context context) { if (context == null) { ...

  5. SharePoint 2013 开发——发布SharePoint应用程序

    博客地址:http://blog.csdn.net/FoxDave 前几篇我们介绍了开发.部署和调试SharePoint应用程序的基础,本篇介绍更实用的操作,当我们开发一个SharePoint应用 ...

  6. JVM-对象的存活与死亡

    当Java虚拟机进行垃圾收集的时候,那么它必须要先判断对象,是否还存活,如果存活就不能对它进行回收.所以判断一个对象是否存活是Java虚拟机必须要实现的. 1.对象是否存活 1)引用计数器:给对象添加 ...

  7. exec方法

    如果 exec 方法没有找到匹配,将返回 null.如果找到匹配项,则 exec 方法返回一个数组,并将更新全局 RegExp 对象的属性以反映匹配结果.数组元素 0 包含了完整的匹配项,而元素 1 ...

  8. poj2392 多重背包

    //Accepted 868 KB 188 ms //多重背包 #include <cstdio> #include <cstring> #include <iostre ...

  9. JS 验证一组input框是否为空的方法

    function checkInput() { var $tr = $("#tb_confirmed .scrollContent").find("tr"); ...

  10. oracle 10gwindow7安装添加内容

    F:\软件\database\stage\prereq\db\refhost.xml <!--Microsoft Windows 7 .Windows 8--> <OPERATING ...