题意:给你一个长度为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. http over git server

    编译安装git 参考 <CentOS7编译安装git> 安装httpd yum install httpd -y 安装gitweb yum install gitweb -y 创建项目根目 ...

  2. <人工智能>人工智能基础

    问题1:扔下圆球的位置(feature特征变量)变化,最终掉落奖项(label结果标签)的变化 feature ----输入 f(x) ----模型,算法 label ----输出 大量已知的数据,训 ...

  3. 8-MySQL-Ubuntu-数据表中数据的增加(一)

    增(insert) (1)全部字段插入数据:按表中字段顺序增加数据 注:(1)主键字段可以使用0/null/default来占位.(2)gender字段中数据类型是枚举,可以使用索引数字1,2,3,4 ...

  4. Elasticsearch索引别名使用

    背景 项目中使用的老的索引,由于数据冗余,会想影响性能.因此需要重新建立索引,但是这样必然需要更新服务中的索引名称,然后重新启动服务,可能会对服务的使用者产生一定的影响.因此,调研了Elasticse ...

  5. js drag drop 收藏夹拖拽移除的简单例子

    代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title& ...

  6. document.write()创建元素有缺陷,

    如果在页面加载完毕后,此时通过这种方式创建元素,那么页面上存在的所有内容全部被干掉.

  7. Linux CentOS-7.0上安装Tomcat7

    Linux CentOS-7.0上安装Tomcat7   安装说明 安装环境:CentOS-7.0.1406安装方式:源码安装 软件:apache-tomcat-7.0.29.tar.gz 下载地址: ...

  8. 30 System类

    System类代表系统,系统级的很多属性和控制方法都放置在该类的内部.该类位于java.lang包.由于该类的构造方法是private的,所以无法创建该类的对象,也就是无法实例化该类.其内部的成员变量 ...

  9. 5432. 【NOIP2017提高A组集训10.28】三元组

    题目 题目大意 给你\(X+Y+Z\)个三元组\((x_i,y_i,z_i)\). 然后选\(X\)个\(x_i\),选\(Y\)个\(y_i\),选\(Z\)个\(z_i\). 每个三元组只能选择其 ...

  10. vue中使用axios与axios的请求响应拦截

    VUE中使用Axios axios的安装 npm install axios vue-axios axios在vue的配置与使用 在main.js中引入axios和vue-axios import a ...