CF1153 F. Serval and Bonus Problem(dp)】的更多相关文章

题意 一个长为 \(l\) 的线段,每次等概率选择线段上两个点,共选出 \(n\) 条线段,求至少被 \(k\) 条线段覆盖的长度期望. 数据范围 \(1 \le k \le n \le 2000, 1 \le l \le 10^9\) 题解 坑爹的 \(\text E\) 浪费了我好多时间,导致没时间做.. 由于每个端点出现的概率互相独立,我们可以只考虑端点的相对顺序. 那么每相邻的两个点把线段分成了 \(2n + 1\) 个段,显然每段的期望长度是 \(\displaystyle \frac…
yyb大佬的博客 这线段期望好神啊... 还有O(nlogn)FFTO(nlogn)FFTO(nlogn)FFT的做法 Freopen大佬的博客 本蒟蒻只会O(n2)O(n^2)O(n2) CODE #include <bits/stdc++.h> using namespace std; const int mod = 998244353; typedef long long LL; const int MAXN = 4005; inline void add(int &x, int…
Serval and Bonus Problem 1.转化为l=1,最后乘上l 2.对于一个方案,就是随便选择一个点,选在合法区间内的概率 3.对于本质相同的所有方案考虑在一起,贡献就是合法区间个数/(2*n+1) 4.运用条件概率或者直接解释,只需求出所有本质不同的方案的合法区间个数的和 5.DP即可. #include<bits/stdc++.h> #define reg register int #define il inline #define fi first #define se…
CF1153F Serval and Bonus Problem 官方的解法是\(O(n ^ 2)\)的,这里给出一个\(O(n \log n)\)的做法. 首先对于长度为\(l\)的线段,显然它的答案就是长度为\(1\)的线段的答案\(\times l\),这样做只是为了方便计算. 考虑对于数轴上区间\([0,1]\)内任意一个点\(x\),它被一条随机线段覆盖的概率是多少:线段的两个端点都在它左边的概率是\(x ^ 2\).都在它右边的概率是\((1 - x) ^ 2\),那么它被覆盖的概率…
Codeforces 思路 去他的DP,暴力积分多好-- 首先发现\(l\)没有用,所以不管它. 然后考虑期望的线性性,可以知道答案就是 \[ \int_0^1 \left[ \sum_{i=k}^n {n\choose i}(2x(1-x))^i(1-2x(1-x))^{n-i}\right]\mathrm{d}x \] 我们令 \[ y=2x(1-x) \] 暴力拆开,答案就是 \[ \int_0^1 \sum_{i=K}^n {n\choose i} \sum_{j=0}^{n-i} (-…
题目链接:洛谷 作为一只沉迷数学多年的蒟蒻OIer,在推柿子和dp之间肯定要选推柿子的! 首先假设线段长度为1,最后答案乘上$l$即可. 对于$x$这个位置,被区间覆盖的概率是$2x(1-x)$(线段端点分别在$x$的两边),不被区间覆盖的概率为$1-2x(1-x)$. $$Ans=\sum_{i=k}^n {n\choose i}\int_{0}^1(2x(1-x))^i(1-2x(1-x))^{n-i}dx$$ $$=\sum_{i=k}^n {n\choose i}\int_{0}^1(2…
目录 @description@ @solution@ @accepted code@ @details@ @description@ 从一条长度为 l 的线段中随机选择 n 条线段,共 2*n 个线段端点将这个线段分成 2*n + 1 个区间. 求这 2*n + 1 个区间中,被随机选择的 n 条线段中的至少 k 条覆盖的,区间的期望长度和. 对 998244353 取模. Input 第一行三个整数 n, k 与 l (1≤k≤n≤2000, 1≤l≤10^9). Output 输出一个整数…
题目分析: 我们思考正好被k个区间覆盖的情况,那么当前这个子段是不是把所有的点分成了两个部分,那么在两个部分之间相互连k条线,再对于剩下的分别连线就很好了?这个东西不难用组合数写出来. 然后我们要证明每个区间的期望长度是点数加一分之一,这个很容易,归纳法证明就行了. 代码: #include<bits/stdc++.h> using namespace std; ; int n,k,l; ]; ],inv[],pw[]; int C(int nn,int kk){ return 1ll*fac…
UVA11069 - A Graph Problem(DP) 题目链接 题目大意:给你n个点.要你找出有多少子串符合要求.首先没有连续的数字,其次不能再往里面加入不论什么的数字而不违反第一条要求. 解题思路:要发现每一个数字选定后.之后能够有两种选择.所以f(n) = f(n + 2) + f(n + 3):边界:当无法往下加入数字的时候那么返回1. 代码: #include <cstdio> #include <cstring> const int maxn = 100; int…
D. Easy Problem dp(有衔接关系的dp(类似于分类讨论) ) 题意 给出一个串 给出删除每一个字符的代价问使得串里面没有hard的子序列需要付出的最小代价(子序列不连续也行) 思路 要满足hard 先要满足har 要满足har 先要满足ha 一次类推 这类问题的一个共同点是要每个地方都要满足一系列前置条件才能成立也就是说有衔接关系 所以如果是构造问题 那么dp数组加一维已经满足了几个,如果是删除问题dp数组加一维 切断了哪一个即可 所以我们可以设置dp数学 dp[i][1,2,3…