题意:给你一个长度为2n-1的数组A,设Bi是A的1~2i-1的中位数。问打乱A,有多少种不同的B序列?

标程:

 #include<bits/stdc++.h>
using namespace std;
const int mod=;
const int N=;
typedef long long ll;
int ans,n,a[N],tmp,dp[N][N][N];
void up(int &x,int y) {x=((ll)x+y)%mod;}
int main()
{
scanf("%d",&n);
for (int i=;i<=*n-;i++) scanf("%d",&a[i]);
sort(a+,a+*n);
dp[n][a[n]!=a[n-]][a[n]!=a[n+]]=;
for (int i=n;i>;i--)
{
int x=(a[i-]!=a[i-]),y=(a[*n-i+]!=a[*n-i+]);
for (int l=;l<=(n-i+)*;l++)
for (int r=;r<=(n-i+)*;r++)
if (tmp=dp[i][l][r])
{
up(dp[i-][l+x][r+y],tmp);
for (int _l=;_l<l;_l++) up(dp[i-][_l+x][r+y+],tmp);
for (int _r=;_r<r;_r++) up(dp[i-][l+x+][_r+y],tmp);
}
}
for (int i=;i<=*n-;i++)
for (int j=;j<=*n-;j++) up(ans,dp[][i][j]);
printf("%d\n",ans);
return ;
}

题解:技巧dp

出题人非常良心,当ai<=2时,答案是2^min(1的个数,2的个数)。

最后一个中位数是可以直接确定的,由于中位数在序列中最多左右按照数值移动相邻一位因此可以用倒三角表示出每一位中位数的可能集合。

1 2 3 4 5 6 7

2 3 4 5 6

3 4 5

4

直接在该三角形上dp,dp[i][j][k]表示第i层,j表示在该层的候选中位数中,该次选取的中位数的左边有几种数(去重)可取,k表示右边。tmp=dp[i][j][k]。

左边取掉一列,右边取掉一列,中位数不变:dp[i][j+扩展][k+扩展]+=tmp。

左边取掉两列,走到上一层中位数应该右移:枚举取到的是哪个中位数,如果能够跳过去,说明中间的几列在之前都没有出现,之前的中位数集合都是不能取它们的,dp[i][j+扩展+1(1表示中间一列变为可取)][r(枚举是哪个中位数,r为该中位数右边还有几个数)+扩展]+=tmp。

右边取两列同理。

soj114 中位数的更多相关文章

  1. [LeetCode] Find Median from Data Stream 找出数据流的中位数

    Median is the middle value in an ordered integer list. If the size of the list is even, there is no ...

  2. [LeetCode] Median of Two Sorted Arrays 两个有序数组的中位数

    There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two ...

  3. BZOJ1303 [CQOI2009]中位数图

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  4. 在MySQL中,如何计算一组数据的中位数?

    要得到一组数据的中位数(例如某个地区或某家公司的收入中位数),我们首先要将这一任务细分为3个小任务: 将数据排序,并给每一行数据给出其在所有数据中的排名. 找出中位数的排名数字. 找出中间排名对应的值 ...

  5. AC日记——中位数 洛谷 P1168

    题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[2], …, A[2k - 1]的中位数.[color=red]即[/color] ...

  6. [2016湖南长沙培训Day4][前鬼后鬼的守护 chen] (动态开点线段树+中位数 or 动规 or 贪心+堆优化)

    题目大意 给定一个长度为n的正整数序列,令修改一个数的代价为修改前后两个数的绝对值之差,求用最小代价将序列转换为不减序列. 其中,n满足小于500000,序列中的正整数小于10^9 题解(引自mzx神 ...

  7. LeetCode 4 Median of Two Sorted Arrays 查找中位数,排除法,问题拓展 难度:1

    思路:设现在可用区间在nums1是[s1,t1),nums2:[s2,t2) 1.当一个数组可用区间为0的时候,由于另一个数组是已经排过序的,所以直接可得 当要取的是最小值或最大值时,也直接可得 2. ...

  8. BZOJ 1303 CQOI2009 中位数图 水题

    1303: [CQOI2009]中位数图 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2340  Solved: 1464[Submit][Statu ...

  9. 【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays

    一道非常经典的题目,Median of Two Sorted Arrays.(PS:leetcode 我已经做了 190 道,欢迎围观全部题解 https://github.com/hanzichi/ ...

随机推荐

  1. 基于Python玩转人工智能最火框架 TensorFlow应用实践✍✍✍

    基于Python玩转人工智能最火框架  TensorFlow应用实践 随着 TensorFlow 在研究及产品中的应用日益广泛,很多开发者及研究者都希望能深入学习这一深度学习框架.而在昨天机器之心发起 ...

  2. 【VUE/JS】vue和js禁止浏览器页面后退

    1.vue 禁止浏览器后退需求是:需要某个路由不能通过浏览器返回,同时不影响相互之间的切换整理一下解决方法 和 使用方法: 1.在路由配置中给这个路由添加meta信息,比如: { path: '/ho ...

  3. Ubuntu 奇怪踩坑记录

    仓库ppa问题 当你使用 apt-get update 时候,提示 仓库 "http://ppa.launchpad.net/hzwhuang/ss-qt5/ubuntu bionic Re ...

  4. tomcat+apache+jk

    安装JDK下载地址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html安装 rpm ...

  5. nginx 简单使用

    一,下载 http://nginx.org/en/download.html 这个是我下载的windows版本 二,解压后目录 三,修改配置文件 (由于80端口很可能被 SQL Server Repo ...

  6. Spring常见面试题及答案解析

    .说一下spring中Bean的作用域 singleton: Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象.Singleton作用域是Spri ...

  7. 17. final 关键字

    1.flnal修饰成员变量   1)定义: 如果一个变量不想被修改,那么就用final修饰 2)语法 public static final double PI=3.14; 3)注意 1. 被fina ...

  8. python中模块和包的概念

    1.模块 一个.py文件就是一个模块.这个文件的名字是:模块名.py.由此可见在python中,文件名和模块名的差别只是有没有后缀.有后缀是文件名,没有后缀是模块名. 每个文件(每个模块)都是一个独立 ...

  9. thinkphp 数据库缓存

    默认的数据库驱动位于Think\Db\Driver命名空间下面,驱动类必须继承Think\Db类,每个数据库驱动必须要实现的接口方法包括(具体参数可以参考现有的数据库驱动类库): 驱动方法 方法说明 ...

  10. 求最长的任意两元素差不超过M的子段——双指针+单调队列hdu4123

    换根dp的部分比较容易,难点在于求求最长的任意两元素差不超过M的子段 首先会想到双指针维护(尺取法),如果p1,p2间的max-min>M,那么p1向右移动,直到p1,p2间的max-min&g ...