soj114 中位数
题意:给你一个长度为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 中位数的更多相关文章
- [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 ...
- [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 ...
- BZOJ1303 [CQOI2009]中位数图
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- 在MySQL中,如何计算一组数据的中位数?
要得到一组数据的中位数(例如某个地区或某家公司的收入中位数),我们首先要将这一任务细分为3个小任务: 将数据排序,并给每一行数据给出其在所有数据中的排名. 找出中位数的排名数字. 找出中间排名对应的值 ...
- AC日记——中位数 洛谷 P1168
题目描述 给出一个长度为N的非负整数序列A[i],对于所有1 ≤ k ≤ (N + 1) / 2,输出A[1], A[2], …, A[2k - 1]的中位数.[color=red]即[/color] ...
- [2016湖南长沙培训Day4][前鬼后鬼的守护 chen] (动态开点线段树+中位数 or 动规 or 贪心+堆优化)
题目大意 给定一个长度为n的正整数序列,令修改一个数的代价为修改前后两个数的绝对值之差,求用最小代价将序列转换为不减序列. 其中,n满足小于500000,序列中的正整数小于10^9 题解(引自mzx神 ...
- LeetCode 4 Median of Two Sorted Arrays 查找中位数,排除法,问题拓展 难度:1
思路:设现在可用区间在nums1是[s1,t1),nums2:[s2,t2) 1.当一个数组可用区间为0的时候,由于另一个数组是已经排过序的,所以直接可得 当要取的是最小值或最大值时,也直接可得 2. ...
- BZOJ 1303 CQOI2009 中位数图 水题
1303: [CQOI2009]中位数图 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2340 Solved: 1464[Submit][Statu ...
- 【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
一道非常经典的题目,Median of Two Sorted Arrays.(PS:leetcode 我已经做了 190 道,欢迎围观全部题解 https://github.com/hanzichi/ ...
随机推荐
- 并发新构件之Semaphore:信号量
Semaphore :JDK描述,通常用于限制可以访问某些资源(物理或逻辑的)的线程数目.一句话说明了他的作用.信号量有一个虚拟的许可证池,new Semaphore(10):构造一个含有10个许可证 ...
- eduCF#60 D. Magic Gems /// 矩阵快速幂
题目大意: 给定n m (1≤N≤1e18, 2≤M≤100) 一个魔法水晶可以分裂成连续的m个普通水晶 求用水晶放慢n个位置的方案modulo 1000000007 (1e9+7) input 4 ...
- spring boot Swagger2(version=2.7.0) 注解@ApiImplicitParam的属性dataType值为”自定义泛型“应用
注解: @ApiImplicitParams @ApiImplicitParam name="需注解的API输入参数", value="接收参数的意义描述" ...
- springboot + zipkin + mysql
zipkin的数据存储可以存在4个地方: 内存(仅用于测试,数据不会持久化,zipkin-server关掉,数据就没有了) 这也是之前使用的 mysql 可能是最熟悉的方式 es Cassandra ...
- 在 Keil uVision4 MDK下配置开发STM32F103Z完整教程
转载的,请原作者勿怪,以下为原链接: http://www.51hei.com/bbs/dpj-30359-1.html(欢迎直接查看原作者) 环境搭建: 1.安装 Keil uVision4 MDK ...
- 6.Srust2结果页面跳转
1. 结果页面存在两种方式 * 全局结果页面 > 条件:如果<package>包中的一些action都返回success,并且返回的页面都是同一个JSP页面,这样就可以配置全局的结果 ...
- vue在v-for循环中绑定v-model
原始示例 <div v-for="item in items"> <input type="text" v-model="'good ...
- 6361. 【NOIP2019模拟2019.9.18】鲳数
题目 题目大意 给你一个区间\([l,r]\),求这个区间内每个整数的十进制上从高位到低位的逆序对个数之和. 思考历程 一开始就知道这是个数位DP-- 结果一直都没有调出来,心态崩了-- 正解 先讲讲 ...
- Jmeter-【beanshell处理器】-随机数(数字、字母、特殊符号、混合)
一.自定义函数
- FFT最新卡常研究
指针优化并没有什么卵用,反而增大了代码的不可读性. 除了本来的循环顺序优化寻址,在预处理单位复数根时,可以连续存储,以增快寻址速度,细节见代码. 代码给出的是FFT,NTT是一样的. #include ...