先推出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. JavaScript去除数组中的重复性

    Array.prototype.unique = function () { var res = [], hash = {}; for (var i = 0, elem; (elem = this[i ...

  2. 内工大acm校赛--整理代码

    题目:小明搜到一行无缩进无换行代码,请帮小明整理代码.无for语句和case语句,而且只有一个主函数.你只要控制注意“:”“{”“}”这三个符号带来的缩进和换行效果就行. Input: 输入只有一行, ...

  3. 如何在redhat下安装办公软件(openoffice)

    在redhat的client版本中自带有办公软件libreoffice,而在server版的redhat中却没有自带的办公软件,那么,如何在redhat的server版下安装办公软件呢? 方法一:配置 ...

  4. Windows的同步I/O和异步I/O

    同步I/O操作 执行步骤 1.        程序通过FileStream对象来打开磁盘文件,然后调用Read方法(内部调用Win32 ReadFile函数),从文件中读取数据.这时,线程从托管代码转 ...

  5. android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理

    本示例说明: 1.自定义listview条目样式,自定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,并且操作后listview自动刷新. 3.响应用户操作点击事 ...

  6. jQuery之$('#id')和$('#'+id)

    最近在项目中使用$('#id')时,发现拿到的元素怎么都是空元素,(前提是id是作为变量),纠结了好一阵,使用fire bug也调试了半天终于发现原来$('#id')是使用整体来匹配,即查找id 为i ...

  7. Note_Master-Detail Application(iOS template)_04_ YJYMasterViewController.h

    //YJYMasterViewController.h #import <UIKit/UIKit.h> @classYJYDetailViewController; #import < ...

  8. C/C++ 字符串 null terminal

    在C/C++中,字符串以'\0'结尾是一种强制要求,或者说,只有满足这个要求的 字符数组才能被称为字符串.否则,你所做的所有操作结果都是未定义的! C标准库string.h中所有关于字符串的函数都有一 ...

  9. powerdesigner的学习

    1  powerdesigner的层次 使用过eclipse作为java开发的都知道,workspace是顶级目录,一次只能打开一个,project是项目,位于workspace中,一个workspa ...

  10. 一个简单的Dump转文本工具—Dump2Text

    每次电脑重装都得烦心,要把庞大的IDE重新配置一次,正准备安装Visual Stdio 2010,上网找镜像的时候发现,Visual Stdio 2013推出了Community版,不仅没有lite掉 ...