第一场多校,感觉自己都跳去看坑自己的题目里去了,很多自己可能会比较擅长一点的题目没看,然后写一下其中一道概率题的题解吧,感觉和自己前几天做的概率dp的思路是一样的。下面先来看题意:一个人有两个TC的账号,一开始两个账号rating都是0,然后每次它会选择里面rating较小的一个账号去打比赛,每次比赛有p的概率+1分,有1-p的概率-2分,当然如果本身是<=2分的也就还是回到0分。然后问最后其中一个账号到达20分时需要打多少次比赛。

先考虑一场比赛的情况,定义dp[k]为当前为k分,要达到20分时的期望回合数。(令q=1-p)

那么显然有 dp[0]=1+p*dp[1]+q*dp[0] 化简得 dp[0]=1/p+dp[1]

dp[1]=1+p*dp[2]+q*dp[0] 化简得 dp[0]=1/p+1/p^2+dp[2]

我们令  dp[0]=tk+dp[k] 那么tk就表示由0状态到达k状态所需的期望回合数。那么显然如果是要到达20分的话,答案就是t20

然后我们看   dp[k]=1+p*dp[k+1]+q*dp[k-2]  代入dp[0]=dp[k]+tk 就有

dp[0]=1/p+1/p*t[k]-(1-p)/p*t[k-2]+dp[k+1]

所以  t[k+1]=1/p+1/p*t[k]-(1-p)/p*t[k-2]

边界条件是  t[0]=0,t[1]=1/p,t[2]=1/p+1/p^2

知道这些就可以递推出所有需要的t[k]了。

现在我们来看如果有两个账号怎么破。首先我们必然是 (0,0)->(0,1)->(1,1)->(1,2)->(2,2)->(2,3)->(3,3)...

(0,0)->(0,1)需要的期望回合数是t[1]-t[0].  (0,1)->(1,1)需要的期望回合数是 t[1]-t[0]

(1,1)->(1,2)需要的期望回合数是t[2]-t[1].  (1,2)->(2,2)需要的期望回合数是 t[2]-t[1].

....

(18,18)->(18,19)需要的期望回合数是t[19]-t[18]. (18,19)->(19,19)需要的期望回合数是t[19]-t[18].

(19,19)->(19,20)需要的期望回合数是t[20]-t[19]。

全部加起来的结果就是t[19]*2+t[20]-t[19].

所以最后的复杂度可以是线性的,而且理论上对于k个账号也是适用的,这样就可以避开了高斯消元的做法了。

#pragma warning(disable:4996)
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<cmath>
#include<queue>
#define ll long long
#define maxn 10000
#define maxe 30000
#define inf 0x3f3f3f3f
using namespace std; double p; double t[25]; int main()
{
while (cin >> p){
t[0] = 0;
t[1] = 1 / p;
t[2] = 1 / p + 1 / (p*p);
for (int i = 3; i <= 20; i++){
t[i] = 1 / p + 1 / p*t[i - 1] - (1 - p) / p*t[i - 3];
}
double ans = t[19] * 2 + t[20] - t[19];
printf("%.6lf\n", ans);
}
return 0;
}

最新文章

  1. [Bootstrap]7天深入Bootstrap(4)CSS组件
  2. [WPF学习笔记]动态加载XAML
  3. SLAM学习笔记(3)相关概念
  4. [转载] 对象存储(2):OpenStack Swift——概念、架构与规模部署
  5. Web Service无法加载协定为“ServiceReference1.xxxxxx”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分
  6. django post分号引发的问题
  7. huhamhire-hosts必备神器!
  8. Installing scikit-learn
  9. Zigbee开发(1)
  10. 应用内支付(IAP)可加入三方支付
  11. 最长公共子序列Lcs(打印路径)
  12. 解决页面使用ifrmae后,在session失效后登录页面在子页面中显示(子窗体出现父窗体)
  13. [UGUI]游戏中的Tips贴图标边缘显示(贴边)
  14. 何在mysql查找效率慢的SQL语句?
  15. 实验-12-JSP简单入门
  16. HTML5-应用程序缓存(Application Cache)
  17. VS Code 管理 .NET Core解决方案
  18. windows下安装、卸载mysql服务
  19. 【大数据】Spark性能优化和故障处理
  20. [Web 前端] React-router4简约教程

热门文章

  1. 【POJ 2243】Knight Moves
  2. 【Matplotlib】图例分开显示
  3. Cocos2d-X3.0 刨根问底(八)----- 场景(Scene)、层(Layer)相关源码分析
  4. 学习笔记--(平衡树)splay
  5. 换了XCode版本之后,iOS应用启动时不占满全屏,上下有黑边
  6. ethtool使用记录
  7. Erlang之父的学习历史及学习建议
  8. cowboy-高性能简洁的erlang版web框架
  9. enum是不是&quot;继承&quot;int
  10. 分子量 (Molar Mass,ACM/ICPC Seoul 2007,UVa 1586)