题目链接:vjudge

大意:有两个人参加一场游戏,这个游戏在一个编号为\(0\text~n-1\)的轮盘上进行,一开始轮盘上的数字均为0;一共有\(m\)轮,每一轮都有一个操作参数\(s_i\),主持人等概率置顶某个位置\(j\),从\(j\)开始数\(s_i\)个位置,每个位置上的数+1(这两个人均不知道主持人所选定的位置)。\(m\)轮结束之后,Alice指定一个位置,主持人告知该位上的数。Bob根据Alice得到的回答再选定一个位置(可以重复),获得该位置上的数。他们的游戏得分就是所获得的两数之和。求其期望(好长啊qwq)

分析

被800搞自闭了

我们将格子编号+1,方便叙述

记\(dp[i][j][k]\)为在进行到第\(i\)轮的时候,第1位上的数字为\(j\)时,第\(k\)位上数字的期望

因为我们总可以将Alice所选的位置看作是第1位,因此答案就是

\[\sum_{i=0}^{m}(max(dp[m][i][j])+i)*m轮之后第1位上的数是i的概率
\]

我们再记一个辅助数组\(f[i][j]\),表示在第\(i\)轮的时候,第1为上的数是\(j\)的概率

这个玩意比较好转移:

\[f[i][j]=(f[i-1][j-1]*s[i]+f[i-1][j]*(n-s[i]))/n
\]

特判一下\(j=0\)时只有一种转移

那么我们接着处理\(dp​\)数组的转移,容易知道\(dp[i][j][k]​\)也会是由\(dp[i-1][j-1][k]​\)和\(dp[i-1][j][k]​\)转移而来

具体的实现的话我们需要第二个辅助数组\(tim[i][j]\)表示当所选取的+1区间长度为\(i\),且保证区间包含第1位时,包含第\(j\)位的情况数,这个可以暴力枚举求解

然后转移就变得比较清晰了:根据转移而来的状态是否包含了第1位来求解

具体转移详见程序

注意arena上交题的时候稍微大一点的数组要开在外面。。。

#include<iostream>
#include<string.h>
#include<string>
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<vector>
#include<queue>
#include<map>
using namespace std;
const int maxd=1000000007,N=100000;
const double pi=acos(-1.0),eps=1e-8;
typedef long long ll;
double f[350][350],dp[350][350][350];
int tim[350][350],m; struct WheelofFortune{
double maxExpectedValue(int n,vector<int> s)
{
int i,j,k;m=s.size();
memset(dp,0,sizeof(dp));
memset(f,0,sizeof(f));
memset(tim,0,sizeof(tim));
for (i=1;i<=n;i++)
{
for (j=1;j<=i;j++)
{
for (k=0;k<i;k++)
{
tim[i][(j-k+n-1)%n+1]++;
}
}
}
f[0][0]=1;
for (i=1;i<=m;i++)
{
for (j=0;j<=i;j++)
{
f[i][j]=f[i-1][j]*(n-s[i-1])/n;
if (j) f[i][j]+=f[i-1][j-1]*s[i-1]/n;
if (f[i][j]<eps) continue;
for (k=1;k<=n;k++)
{
dp[i][j][k]+=(dp[i-1][j][k]*(n-s[i-1])+(s[i-1]-tim[s[i-1]][k]))/n*f[i-1][j]/f[i][j];
if (j) dp[i][j][k]+=(dp[i-1][j-1][k]*s[i-1]+tim[s[i-1]][k])/n*f[i-1][j-1]/f[i][j];
}
}
}
double ans=0.0;
for (i=0;i<=m;i++)
{
double maxnum=0.0;
for (j=2;j<=n;j++) maxnum=max(maxnum,dp[m][i][j]);
ans+=f[m][i]*(i+maxnum);
}
return ans;
}
}a;

topcoder SRM642 div1 hard WheelofFortune的更多相关文章

  1. TopCoder 649 div1 & div2

    最近一场TC,做得是在是烂,不过最后challenge阶段用一个随机数据cha了一个明显错误的代码,最后免于暴跌rating,还涨了一点.TC题目质量还是很高的,非常锻炼思维,拓展做题的视野,老老实实 ...

  2. TopCoder SRM500 Div1 250 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-250.html SRM500 Div1 250 题意 (看题用了半个小时--) 有 n 个人(编号 ...

  3. TopCoder SRM500 Div1 500 分治

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-500.html SRM500 Div1 500 没想到 double 的精度居然没有爆-- 考虑以 ...

  4. TopCoder SRM500 Div1 1000 其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-1000.html SRM500 Div1 1000 设 \(v_1,v_2,\cdots ,v_9 ...

  5. TopCoder SRM502 Div1 500 贪心 01背包

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-500.html SRM502 Div1 500 好题. 首先,如果已经确定了解决所有问题的优先级, ...

  6. TopCoder SRM502 Div1 1000 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-1000.html SRM502 Div1 1000 题意 从 [0,n-1] 中选择 k 个不同的 ...

  7. topcoder SRM712 Div1 LR

    题目: Problem Statement      We have a cyclic array A of length n. For each valid i, element i-1 the l ...

  8. TopCoder 603 div1 & div2

    div2 250pts MiddleCode 题意:s串长度为奇数时,将中间字符取掉并添加到t末尾:长度为偶数时,将中间两个较小的字符取掉并添加到末尾. 分析:直接做,学习了一下substr(s, p ...

  9. TopCoder SRM704 Div1 800 构造

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM704-800.html 题解 考虑构造一个 $n = 20$ 的图. 先把所有 $i$ 都连向 $i-1$ ...

随机推荐

  1. Meterpreter常⻅见⽤用法

    0x01 背景 meterpreter作为后渗透模块有多种类型,并且命令由核⼼心命令和扩展库命令组成,极⼤大的丰富了了攻击⽅方式. 需要说明的是meterpreter在漏漏洞洞利利⽤用成功后会发送第二 ...

  2. Python_每日习题_0003_完全平方数

    # 题目 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? # 程序分析 因为168对于指数爆炸来说实在太小了,所以可以直接省略数学分析,用最朴素的方法来获取 ...

  3. java 8中抽象类与接口的异同

    1.java 8中抽象类与接口的异同 相同点: 1)都是抽象类型: 2)都可以有实现方法(以前接口不行): 3)都可以不需要实现类或者继承者去实现所有方法,(以前不行,现在接口中默认方法不需要实现者实 ...

  4. Vue之子组件

    全局组件 <script src="./static/vue.min.js"></script> // 导入vue <body> <div ...

  5. js 移动端 多图上传 预览 删除 base64转为url 传给后端

    说下主要的逻辑,首先是利用input type="file",上传文件,然后判断文件类型是否是图片,这里要注意(multiple,安卓一次一张,ios可以多张). 接着把本地图片转 ...

  6. 三、taro路由及设计稿及尺寸单位

    一.路由配置 路由配置跟小程序一样,在入口文件的 config 配置中指定好 pages 通过taro API 跳转,详见导航 // 跳转到目的页面,打开新页面 Taro.navigateTo({ u ...

  7. redis4.X

    tar -zxvf ****cd /redismakecd /srcmake install vi redis.confdaemonize yes mkdir /usr/local/redis/bin ...

  8. apach ab 安装时的错误

    1.cmd进入bin下:执行httpd -k install 需要管理员 登陆安装 我们打开conf文件夹,找到httpd.conf,修改如下内容,让serverroot指向你的安装位置: Defin ...

  9. [转帖]Linux命令中特殊符号

    Linux命令中特殊符号 转自:http://blog.chinaunix.net/uid-16946891-id-5088144.html   在shell中常用的特殊符号罗列如下:# ; ;; . ...

  10. 重构客户注册-基于ActiveMQ实现短信验证码生产者

    重构目标:将bos_fore项目中的CustomerAction作为短信消息生产者,将消息发给ActiveMQ,创建一个单独的SMS项目,作为短信息的消费者,从ActiveMQ获取短信消息,调用第三方 ...