很喵的一道题(我可不是因为看了YOUSIKI的题解才变成这样的) $ans=\sum_{x<=n}\sum_{i<=n} iP(L=i)$ 其中P(x)表示视线为x的概率. 所以只需要求出对于每个人的$\sum_{i<=n} iP(L=i)$就可以了. 然后我们转化$\sum_{i<=n}P(L>=i)$ 这步很喵,大概运用的差分的思想. 然后我们大力展开之后合并,就可以得到一堆组合数,然后考虑组合数的意义,对组合数合并,最后得出$ans=\frac{n+1}{k+2}$k表…
2720: [Violet 5]列队春游 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 189  Solved: 133[Submit][Status][Discuss] Description Input Output Sample Input   Sample Output   HINT Source interviewstreet--virtual stick [Submit][Status][Discuss] LTY大佬来嘲讽我了“你水不水…
2720: [Violet 5]列队春游 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 173  Solved: 125[Submit][Status][Discuss] Description Input Output Sample Input   Sample Output   HINT 题解:对于这种题目我只能呵呵一笑欺负我是单身汪,哎! 一. 二.枚举每个位置,在枚举每个人,枚举每个人由当前位置可以看到的地方 于是: 于是我们如代码转移即可…
4872: [Shoi2017]分手是祝愿 题意:n个灯开关游戏,按i后i的约数都改变状态.随机选择一个灯,如果当前最优策略\(\le k\)直接用最优策略.问期望步数\(\cdot n! \mod 1003\) 50% n=k 送分...从大到小选就行了...实际上送了80分... 这个期望DP没想到不应该啊 \(f[i]\)表示还有i步可以结束的期望步数 \[ f[i] = \frac{i}{n} f[i-1] + \frac{n-i}{n}f[i+1] +1 \\ f[i+1] = ...…
[题意]n种宝物,k关游戏,每关游戏给出一种宝物,可捡可不捡.每种宝物有一个价值(有负数).每个宝物有前提宝物列表,必须在前面的关卡取得列表宝物才能捡起这个宝物,求期望收益.k<=100,n<=15. [算法]期望DP+状压DP [题解]主要需要记录的状态是前缀已有宝物,所以设f[i][S]表示前i关已有宝物列表S的期望收益. 根据全期望公式,依赖于第i+1关的宝物选择:(如果列表符合) $$f[i][S]=\sum_{i=1}^{n}\frac{1}{n}*Max(f[i+1][S'],f[…
Description Input Output Sample Input   Sample Output   HINT 数学题都这么骚的么……怎么推出来的啊……我是真的想不出来…… 首先,要算总的视野期望,我们可以把每一个小朋友的视野期望算出来,然后求和 于是考虑如何计算每个小朋友的视野期望,设$L$表示视野长度,视野期望为$ans$,则有$$ans=\sum_{i=1}^n i*P(L=i)$$ 然后考虑转化一下,我们原来是枚举视野长度然后考虑概率,那么我们换一个想法,考虑它前面的第$i$个…
因为每次选择都是有后效性的,直接dp肯定不行,所以需要逆推. f[i][j]表示从第i次开始,初始状态为j的期望收益 #include<cstdio> #include<cstring> #include<iostream> using namespace std; int bit[18],K,n,aa,ned[18],a[18]; double f[105][1<<17]; int main() { bit[0]=1; for(int i=1;i<=…
我们可以用n次BFS预处理出 to[][]数组,to[i][j]表示聪聪从i点到j点第一步会走哪个点. 那么对于聪聪在i点,可可在j点,聪聪先走,定义dp[i][j]表示步数期望. 那么显然有dp[i][j]=(sigma(dp[p][w])+dp[p][j])/(dee[j]+1)+1. 其中p表示to[to[i][j]][j],w表示j点邻接的点. 边界状态就是 如果i==j,那么dp[i][j]=0. 如果i和j的距离在聪聪的一步之内,那么dp[i][j]=1. 记忆化搜索一下即可. #…
当前得分期望=(上一轮得分期望+这一轮得分)/m dp[i,j]:第i轮拿的物品方案为j的最优得分期望 如果我们正着去做,会出现从不合法状态(比如前i个根本无法达到j这种方案),所以从后向前推 如果当前方案j里具备了取k这个物品的条件 那么dp[i,j]+=max{dp[i+1,j],dp[i+1,j  or  1<<(k−1)]+x[k]} 否则dp[i,j]+=dp[i+1,j] #include<cstdio> #include<iostream> using n…
状压dp,设f[i][j][0/1]为前i个时间段换了j间教室的期望体力消耗,转移很好想(但是写起来好长= =) #include<iostream> #include<cstdio> using namespace std; const int N=2005; int n,m,v,e,c[N],d[N]; double k[N],f[N][N][2],ans=1e9,a[N][N],z; int read() { int r=0,f=1; char p=getchar(); wh…