嘟嘟嘟

题目大意就是对于一个m面的骰子,回答这么两个问题:

1.求连续扔n次都是同一数字的期望次数。

2.求连续扔n次每一次数字都不相同的期望次数。

对于期望dp特别菜的我来说,这道题已经算是很难了。反正是抠了一天……

我们先看第一问。

令fi表示连续 i 次数字都相同的期望,那么要考虑他能转化到什么状态,而不是由什么状态转化过来。

转化到什么状态要考虑到所有情况:包括扔的数字相同的和不同两种情况,于是转移方程就写出来了:

  fi = 1 / m * fi+1 + (m - 1) / m * f1.

因为如果扔到的数字不同,就退回到了f1.

然而这个方程是有后效性的,所以变一个形:

  fi+1 = m * fi - (m - 1) * f1

还可以再变,相邻两项作差得:

  fi+1 - fi = m * (fi - fi-1)

当i = 1时,a1 = f1 = 1

当i >= 2时,令ai = fi - fi-1

于是ai就是一个公比为m的等比数列。

然后很显然

  fn = Sn = a1 * (1 - qn) / (1 - q) = (1 - mn) / (1 - m).

用快速幂求解即可。

然后是第二问:

令f[i]表示抛出 i 次不一样的数字的期望,则

  fi = (m - i) / m * fi+1 + 1/ m * fi + 1 / m * fi-1 + 1/ m * fi-2 +……+ 1 / m * f1.

因为有1 / m的概率和第fj次是相同的。

然后每一次将fi累加到fn就行了。

 #include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<cctype>
#include<vector>
#include<stack>
#include<queue>
using namespace std;
#define enter puts("")
#define space putchar(' ')
#define Mem(a, x) memset(a, x, sizeof(a))
#define rg register
typedef long long ll;
typedef double db;
const int INF = 0x3f3f3f3f;
const db eps = 1e-;
const int maxn = 1e6 + ; int T, d, m, n;
db dp[maxn]; int quickpow(int a, int b)
{
int ret = ;
while(b)
{
if(b & ) ret *= a;
a *= a; b >>= ;
}
return ret;
} int main()
{
while(scanf("%d", &T) != EOF)
{
while(T--)
{
scanf("%d%d%d", &d, &m, &n);
if(!d) printf("%.9lf\n", (db)(quickpow(m, n) - ) / (db)(m - ));
else
{
dp[] = 1.00; dp[n] = dp[];
for(rg int i = ; i < n; ++i)
{
dp[i] = (db)m / (db)(m - i) * dp[i - ];
dp[n] += dp[i];
}
printf("%.9lf\n", dp[n]);
}
}
}
return ;
}

最新文章

  1. 获取linux服务器基本信息脚本
  2. 解析C#开发过程常见的编程模式
  3. Visual Studio2008环境下查找C#中方法的“查看所有引用”
  4. iOS UILocalNotification 每2周,每两个月提醒
  5. html5 canvas 粒子特效
  6. 微信公共服务平台开发(.Net 的实现)7-------发送图文消息
  7. jfinal上传下载
  8. Delphi 用ToolButton和MonthCalendar实现DateTimePicker的功能
  9. Linux下查看所有用户(shell脚本获取)
  10. Xcode使用小结2
  11. iOS 之 界面编程解析
  12. 2017年9月3日 Spring及Mybatis中连接数据库的不同方式
  13. 2017-12-30-如何彻底清除现存GIT仓库的大量提交历史
  14. 创建的UIWindow为何不显示
  15. 《JavaScript设计模式与开发实践》笔记第一章
  16. 微信小程序写tab切换
  17. redis(2)---redis基本数据类型及常见命令
  18. Andrew and Taxi CodeForces - 1100E (思维,拓扑)
  19. 几个第三方yum源
  20. IOS开发经验总结(二)

热门文章

  1. C# Winform程序CPU占用高的原因和解决方法
  2. D3基础--数轴
  3. Apache Rewrite的主要功能
  4. 一款软件同时管理MySQL,MongoDB数据库
  5. DB2 Metadata
  6. RequireJS 是一个JavaScript模块加载器
  7. 创业公司感悟录之十个提醒—by李天平
  8. centos虚拟机网卡配置
  9. mac自动生成路径问题
  10. CSS盒子模型中()是透明的,这部分可以显示背景()