题目链接: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. Centos7 下SVN迁移

    SVN迁移需要做如下操作: 1. 将原来的Repository导出 . #svnadmin dump 原有repos的目录路径 > dumpfile (不同服务器安装目录不同,根据具体情况调整) ...

  2. 006-筛选分类排序搜索查找Filter-Classificatio-Sort-Search-Find-Seek-Locate

    006-筛选分类排序搜索查找Filter-Classificatio-Sort-Search-Find-Seek-Locate https://www.cnblogs.com/delphixx/p/1 ...

  3. hdu1201,hdu6252差分约束系统

    差分约束系统一般用来解决a-b>=c的问题,有n个这样的限制条件,求出某个满足这些条件的解 可以将这个问题转化成最长路问题,即b到a的距离最少为c,而有多条b到a的路的话,我们就取最长的b到a的 ...

  4. Jury Meeting CodeForces - 854D (前缀和维护)

    Country of Metropolia is holding Olympiad of Metrpolises soon. It mean that all jury members of the ...

  5. Bad Hair Day POJ - 3250 (单调栈入门题)

    Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-cons ...

  6. .net之httphandler小记

    本地调试代码遇到的一个问题,没有走URL路由器(UrlReWriter : IHttpHandlerFactory),于是网上科普了一下原理,主要有两点: 1.asp.net在处理http请求时,会由 ...

  7. py使用笔记-pandas函数

    1,nan替换为0df = df(np.nan, 0, regex=True)2.inf替换为0df= df(np.inf, 0.0, regex=True)3.从数据库读取数据到dataframei ...

  8. springboot注解@SpringBootApplication分析

    @SpringBootApplication注解用在Spring Boot的入口类上面,是Spring Boot提供的应用启动相关的注解. 直接上注解的源码: @Target(ElementType. ...

  9. [转帖]windows7/windows NT介绍

    windows7/windows NT介绍 原文应该是IT168发布的 但是一直没找到 感觉看了之后 明白了很多 技术都是互相融合的 没有严格意义上的对立直说.   Windows 7/Windows ...

  10. Angular MVC

    <!DOCTYPE html><html ng-app="myApp"><head lang="en"> <meta ...