思路:

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 .

代码如下:

 #include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define ll __int64
#define M 2011
using namespace std;
ll pows(ll a,ll b,ll mod)
{
ll ans=;
while(b){
if(b&) ans=ans*a%mod;
b>>=;
a=a*a%mod;
}
return ans;
}
int main(){
ll n,m1,m2,p;
ll inv30=pows(,M-,M);
ll inv5=pows(,M-,M);
while(scanf("%I64d",&n)&&n){
p=pows(,n,);
m1=((p+)%M+M)%M*inv30%M;
m2=((p-)%M+M)%M*inv5%M;
printf("%I64d %I64d\n",m1,m2);
}
return ;
}

hdu 4599 Dice 概率DP的更多相关文章

  1. HDU 4599 Dice (概率DP+数学+快速幂)

    题意:给定三个表达式,问你求出最小的m1,m2,满足G(m1) >= F(n), G(m2) >= G(n). 析:这个题是一个概率DP,但是并没有那么简单,运算过程很麻烦. 先分析F(n ...

  2. hdu 4652 Dice 概率DP

    思路: dp[i]表示当前在已经投掷出i个不相同/相同这个状态时期望还需要投掷多少次 对于第一种情况有: dp[0] = 1+dp[1] dp[1] = 1+((m-1)*dp[1]+dp[2])/m ...

  3. HDU 3853LOOPS(简单概率DP)

    HDU 3853    LOOPS 题目大意是说人现在在1,1,需要走到N,N,每次有p1的可能在元位置不变,p2的可能走到右边一格,有p3的可能走到下面一格,问从起点走到终点的期望值 这是弱菜做的第 ...

  4. Throwing Dice(概率dp)

    C - Throwing Dice Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Lig ...

  5. HDU - 1099 - Lottery - 概率dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1099 最最简单的概率dp,完全是等概率转移. 设dp[i]为已有i张票,还需要抽几次才能集齐的期望. 那么dp[ ...

  6. HDU 4405 【概率dp】

    题意: 飞行棋,从0出发要求到n或者大于n的步数的期望.每一步可以投一下筛子,前进相应的步数,筛子是常见的6面筛子. 但是有些地方可以从a飞到大于a的b,并且保证每个a只能对应一个b,而且可以连续飞, ...

  7. HDU 4576 Robot(概率dp)

    题目 /*********************复制来的大致题意********************** 有N个数字,M个操作, 区间L, R. 然后问经过M个操作后落在[L, R]的概率. * ...

  8. [HDU 4089]Activation[概率DP]

    题意: 有n个人排队等着在官网上激活游戏.Tomato排在第m个. 对于队列中的第一个人.有以下情况: 1.激活失败,留在队列中等待下一次激活(概率为p1) 2.失去连接,出队列,然后排在队列的最后( ...

  9. hdu 3853 LOOPS 概率DP

    简单的概率DP入门题 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include ...

随机推荐

  1. php 去除数组中重复元素

    去除数组中重复元素, 找了下可以一下两个函数 php array_flip()与array_uniqure() $arr = array(…………) ;// 假设有数组包含一万个元素,里面有重复的元素 ...

  2. Linux进程间通信方法总结

    ①匿名管道(pipe) 匿名管道(pipe)管道是一种半双工的通信方式,数据只能单向流动.如果要进行双工通信,需要建立两个管道.管道只能在具有亲缘关系的进程间使用,例如父子进程或兄弟进程. ②有名管道 ...

  3. How to begin Python learning?

    如何开始Python语言学习? 1. 先了解它,Wiki百科:http://zh.wikipedia.org/zh-cn/Python 2. Python, Ruby等语言来自开源社区,社区的学法是V ...

  4. SQL Server 数据库身份认证以及包含数据库

    首先分为SQL Server 认证与Windows 身份认证. SQL Server 认证可以运行以下语句来查询 select * from sys.sql_logins 管理员可以直接修改密码,但无 ...

  5. oracle-11g创建用户名的时候默认区分大小写

    oracle11g-11.2.0.3.0 - 64bit oracle-11g创建用户名的时候默认区分大小写 设置不区分大小写: alter system set sec_case_sensitive ...

  6. 学C++之感悟

    程序设计真的就这么难得入门啊 最要命的事情就是看那些看不懂的书.断断续续地看C++Primer好几天了,还是一点眉目都没有,稀里糊涂的.看得头疼了用Google找过来人留下的东西看,无意中发现了一篇自 ...

  7. office365 development

    Introduction to Office 365 Development http://www.microsoftvirtualacademy.com/training-courses/intro ...

  8. Surrounded Regions

    Surrounded Regions Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A ...

  9. XCODE真机调试设备连接一直忙碌如何处理

    只是还没反应过来 等一会就行了

  10. [搜片神器]winform程序自己如何更新自己的方法代码

    DHT抓取程序开源地址:https://github.com/h31h31/H31DHTDEMO 数据处理程序开源地址:https://github.com/h31h31/H31DHTMgr 国外测试 ...