0%

20210216笔记

T1

题目描述

阿米巴和小强是好朋友。
阿米巴和小强在大海旁边看海水的波涛。小强第一次面对如此汹涌的海潮,他兴奋地叫个不停。而阿米巴则很淡定,他回想起曾经的那些日子,事业的起伏,情感的挫折……总之今天的风浪和曾经经历的那些风雨比起来,简直什么都不算。
于是,这对好朋友不可避免地产生了分歧。为了论证自己的观点,小强建立了一个模型。他海面抽象成一个11NN的排列P[1N]P[1…N]。定义波动强度等于相邻两项的差的绝对值的和,即:
L=P2P1+P3P2++PNPN1L = | P_2 - P_1 | + | P_3 - P_2 | + \cdots + | P_N - P_{N-1} |
给你一个NNMM,问:随机一个1N1…N的排列,它的波动强度不小于MM的概率有多大?

答案请保留小数点后KK位输出,四舍五入。

【数据规模】 对于30%的数据,N ≤ 10。

对于另外30%的数据,K ≤ 3。

对于另外30%的数据,K ≤ 8。

对于另外10%的数据,N ≤ 50。

对于100%的数据,N ≤ 100,K ≤ 30,0 ≤ M ≤ 2147483647。

30分做法

由于K比较小,可以用随机化求概率,如枚举一百万个排列并计算。

正解

数学课上,我们学到概率=\frac{可行方案数}{总方案数}
显然,总方案数为n!n!
那么,可行方案数怎么求呢?

考虑每个排列对总排列的贡献,i=2nP[i]P[i1]\sum\limits_{i=2}^{n}|P[i] - P[i - 1]|可以拆分成i=1nP[i]a[i]\sum\limits_{i=1}^{n}P[i]*a[i], 其中a[i]a[i]ii的贡献,P[i]=niP[i] = n - i,可以取到[2,2][-2, 2],如果不考虑边界的话,只会取到2, 0, 2-2,\ 0,\ 2这三个数。

从大到小插入数字,用f[i][j][k]表示考虑前i大的数字,这i个数字在最后的排列中是连续的j段,这i个数字对L的贡献为k,的方案数
那么,怎么进行转移呢?
我们可以看出,序列分为不连续的几段
接下来,我们要把i+1i+1这个元素(值为n-i)的值插入进去.
有三种情况
第一种,i+1i+1连接了两个
e,k,pe,k,p分别是三种不同的情况: (半圆的直径为1)

  1. i+1i+1连接两段
    f[i+1][j1][k2(ni)]f[i+1][j-1][k-2*(n-i)]
  2. i+1i+1另起炉灶
    f[i+1][j+1][k+2(ni)]f[i+1][j+1][k+2*(n-i)]
  3. i+1i+1依附于一段
    f[i+1][j][k]f[i+1][j][k]
    分别更新即可。
    对于这总方法,我们形象地称之为填坑DP

T2


分类讨论
当k = 0时,只有一种:

当k = 1时,只有

两种
当k = 2时,除上面的两种外,还有

三种。
这些都很简单。
但是,n=3n = 3 时就不简单了, 需要使用动态规划解决问题。
第一步,设计状态。
f[i][j][k]f[i][j][k]为所有只包含前ii个数,方向为j(需要方向判断,因为“不喜欢”是单向的),
i,i1,i2i, i-1, i-2这三个数的状态为k (这一维大小2^6)

状态转移
仅当i于i-1之间,且i于i-1中间的两个空隙都没有填数的时候,i可以另起炉灶
其他同上题

T3坑
T4坑
T5坑
T6坑
T7坑
T8坑
T9坑
T10坑

欢迎关注我的其它发布渠道