首页 > 其他分享 >【luogu AT2366】Prefix Median(DP)

【luogu AT2366】Prefix Median(DP)

时间:2022-08-24 18:00:51浏览次数:170  
标签:右移 int luogu AT2366 中位数 Prefix

Prefix Median

题目链接:luogu AT2366

题目大意

给你一个长度为 2n-1 的序列,你可以任意排序它们,问你有多少个不同的 b 数组。
b 数组的第 i 位为 a 数组 1~2i-1 区间的数的中位数。

思路

考虑 \(b\) 的限制,你考虑 \(b_i\) 跟 \(b_{i-1}\) 的区别。
就是每次加入两个数,如果都在当前中位数左边中位数左移,都在右边就右移,一左一右就不变。

所以中位数只会左右移一格,所以如果我们把 \(a\) 排序,那:
\(a_{n-i+1}\leqslant b_i\leqslant a_{n+i-1}\)

那你接下来就是要满足每次至多移动一个位置。
也就是我们可以不用管 \(a\) 放的情况,你就如果要 \(a\) 某个位置就跨过去,然后那中间的位置就是先不放进去。
也就是说我们只需要限制向内走的情况。

那仍然不好处理,考虑反过来,那我们确定了 \(b_i,b_{i+1}\) 的时候,就不能再用 \((b_i,b_{i+1})\) 的数字了。
那我们就可以 DP 了,设 \(f_{i,j,k}\) 为当前弄好了 \(i\) 个,左边有 \(j\) 个右边有 \(k\) 个。
然后每次加入新的两个,注意到可能会是一样的,那一样的是同一个应该要,所以你 \(j,k\) 这连个不能加。
然后就分不变位置,左移和右移,然后左移右移你要枚举走到的位置。

然后复杂度 \(O(n^4)\) 没毛病。

代码

#include<cstdio>
#include<algorithm>
#define ll long long
#define mo 1000000007

using namespace std;

const int N = 105;
int n, a[N];
ll f[N][N][N];

int main() {
	scanf("%d", &n);
	for (int i = 1; i < n * 2; i++) scanf("%d", &a[i]);
	sort(a + 1, a + 2 * n);
	
	f[0][0][0] = 1;
	for (int i = 1; i < n; i++) {
		int L = a[n - i + 1] != a[n - i], R = a[n + i] != a[n + i - 1];
		for (int j = 0; j <= 2 * n; j++)
			for (int k = 0; k <= 2 * n; k++) {
				(f[i][j + L][k + R] += f[i - 1][j][k]) %= mo;
				for (int num = 0; num < j + L; num++)
					(f[i][num][k + R + 1] += f[i - 1][j][k]) %= mo;
				for (int num = 0; num < k + R; num++)
					(f[i][j + L + 1][num] += f[i - 1][j][k]) %= mo;
			}
	}
	ll ans = 0;
	for (int i = 0; i <= 2 * n; i++)
		for (int j = 0; j <= 2 * n; j++)
			(ans += f[n - 1][i][j]) %= mo;
	printf("%lld", ans);
	
	return 0;
}

标签:右移,int,luogu,AT2366,中位数,Prefix
From: https://www.cnblogs.com/Sakura-TJH/p/luogu_AT2366.html

相关文章

  • 【luogu P2508】圆上的整点(高斯素数模板)
    圆上的整点题目链接:luoguP2508题目大意给你一个圆,问你圆周上有多少个点的坐标是整点。思路考虑一个东西叫做高斯整数。其实它是复数,是\(a+bi\)中\(a,b\)都是整......
  • luogu P1488 肥猫的游戏
    肥猫的游戏P1488肥猫的游戏-洛谷|计算机科学教育新生态(luogu.com.cn)题目描述野猫与胖子,合起来简称肥猫,是一个班的同学,他们也都是数学高手,所以经常在一起讨论数......
  • luogu P1721 [NOI2016] 国王饮水记
    题面传送门首先我们发现,一定不会有低于\(h_1\)的参与操作的过程。然后考虑一个\(x\)与比它大的\(y<z\),则发现一定是先\((x,y)\),再\((\frac{x+y}{2},z)\)更好。因为这样......
  • spring cloud gateway-filter深入了解(StripPrefix与PrefixPath)
    网关过滤器StripPrefix过滤器作用:去掉部分URL路径 spring:cloud:gateway:routes:-id:bds-lbs-serviceuri:lb://bds-lbs-serv......
  • 「AGC012F」Prefix Median 题解 (DP)
    题目简介给定一个长度为\(2n-1\)的序列\(a\),你可以随意排列\(a\)中的元素,请求出有多少种不同的序列\(b\),满足\(b\)的长度为\(n\)。\(b_i=\{a_1\ldotsa_{2......
  • luogu P8293 [省选联考 2022] 序列变换
    题面传送门因为WC2022考了这种构造,所以下意识将括号序列建树。手玩一下发现第一个操作实际上是干了这个事情:也就是说把用其中一个括号将另一个同层括号在树上移到了下......
  • luoguP3521 [POI2011]ROT-Tree Rotations【线段树】
    你要写热,就不能只写热。要写酷暑,写骄阳,写他人耳闻便生恐的炙烤和炎灼。要写白日出门一刻便肤色黝黑,背心透彻。写求雨心切,写出行伞遮。写夜晚不停的风扇和蝉聒。写鸡......
  • luoguP3224 [HNOI2012]永无乡【线段树,并查集】
    洞庭青草,近中秋,更无一点风色。玉鉴琼田三万顷,着我扁舟一叶。素月分辉,明河共影,表里俱澄澈。悠然心会,妙处难与君说。应念岭表经年,孤光自照,肝胆皆冰雪。短发萧骚襟袖冷,稳泛......
  • 【luogu CF1710C】XOR Triangle(数位DP)
    XORTriangle题目链接:luoguCF1710C题目大意给你一个数n,要你求有多少个满足条件的a,b,c使得它们两两异或得到的三个值可以得到一个非退化三角形。其中a,b,c值域在......
  • 【$dp$】$\text{LuoguP6570}$ 优秀子序列
    \(\text{LuoguP6570}\)优秀子序列读完题大概能yy到一个转移,即枚举两个不相交的子集然后转移。其实这题的顺序都无所谓,应该排个序,或者直接在值域上操作。\(DP\),用\(f......