逆序对的相关问题:bzoj1831,bzoj2431
先从简单一点的bzoj2431入手;
n个数1~n已经限定了,所以
对于1~i-1,新加入i,最多可以增加i-1个逆序对,最少增加0个逆序对
f[i,j]表示1~i形成的序列逆序对为j的方案数
比较容易得出f[i,j]=Σf[i-1,k];
用前缀和优化即可
const mo=;
var f:array[..,..] of longint;
s:array[..] of longint;
i,j,k,n,m,p:longint; begin
readln(n,m);
k:=;
f[,]:=;
for i:= to n do
begin
k:=-k;
s[]:=f[-k,] mod mo;
for j:= to m do
begin
s[j]:=(s[j-]+f[-k,j]) mod mo;
f[k,j]:=;
end;
for j:= to m do
begin
p:=j-i+;
if p< then p:=;
f[k,j]:=(s[j]-s[p]+f[-k,p]) mod mo;
end;
end;
if f[k,m]< then f[k,m]:=f[k,m]+mo;
writeln(f[k,m] mod mo);
end.
bzoj2431
然后是bzoj1831
首先我们可以先求出固定的逆序对;
然后根据贪心的思想,不难得出需要填的数是不下降的
具体证明见:http://www.cnblogs.com/htfy/archive/2012/12/11/2813497.html
令big[i,j]表示第i为数字为j时,前面有多少个比它大的
small[i,j]表示第i为数字为j时,前面有多少个比它小的
f[i,j]表示第i个-1填j最小逆序对数目
得:f[i,j]=min(f[i-1,k])+small[loc[i],j]+big[loc[i],j];
我曾经讲过对于这样的dp怎么优化,具体见程序
var c,a,b:array[..] of longint;
f,small,big:array[..,..] of longint;
t,n,m,i,j,ans,s:longint; function lowbit(x:longint):longint;
begin
exit(x and (-x));
end; function ask(x:longint):longint;
begin
ask:=;
while x> do
begin
ask:=ask+c[x];
x:=x-lowbit(x);
end;
end; procedure add(x:longint);
begin
while x<=m do
begin
inc(c[x]);
x:=x+lowbit(x);
end;
end; begin
readln(n,m);
for i:= to n do
begin
read(a[i]);
if a[i]=- then
begin
inc(t);
b[t]:=i;
end;
end;
for i:=n downto do
begin
if a[i]<>- then
begin
add(a[i]);
s:=s+ask(a[i]-);
end
else begin
for j:= to m do
small[i,j]:=ask(j-);
end;
end;
fillchar(c,sizeof(c),);
for i:= to n do
begin
if a[i]<>- then add(a[i])
else begin
for j:= to m do
big[i,j]:=ask(m)-ask(j);
end;
end;
for i:= to t do
begin
f[i,]:=f[i-,];
for j:= to m do
f[i,j]:=min(f[i-,j],f[i,j-]); //优化
for j:= to m do
f[i,j]:=f[i,j]+big[b[i],j]+small[b[i],j];
end;
ans:=;
for i:= to m do
ans:=min(ans,f[t,i]);
writeln(ans+s);
end.
bzoj1831
总体来说,这两题不算太难,但我还是花了很多时间
是做题不够认真,戒之戒之
自己想出的零散的特点性质没有很好的整合,导致题目做不出来
逆序对的相关问题:bzoj1831,bzoj2431的更多相关文章
- [BZOJ1786][BZOJ1831]逆序对
[BZOJ1786][BZOJ1831]逆序对 试题描述 输入 输出 输入示例 - - 输出示例 数据规模及约定 见“输入” 题解 首先这题有一个性质,即,填的数从左到右一定不降.证明不妨读者自己yy ...
- 【BZOJ2431】逆序对数列(动态规划)
[BZOJ2431]逆序对数列(动态规划) 题面 Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组 ...
- 【BZOJ1831】[AHOI2008]逆序对(动态规划)
[BZOJ1831][AHOI2008]逆序对(动态规划) 题面 BZOJ 洛谷 题解 显然填入的数拎出来是不降的. 那么就可以直接大力\(dp\). 设\(f[i][j]\)表示当前填到了\(i\) ...
- BZOJ2431 HAOI2009 逆序对数列 【DP】*
BZOJ2431 HAOI2009 逆序对数列 Description 对于一个数列ai{a_i}ai,如果有i<j且ai>aja_i>a_jai>aj,那么我们称aia ...
- bzoj2431: [HAOI2009]逆序对数列
dp. f[i][j]表示放置第i个数有j个逆序对的方案数. s[i][j]维护前缀和(f[i][0]~f[i][j]). 状态转移方程 f[i][j]=s[i-1][j]-s[i-1][max(j- ...
- bzoj2431:[HAOI2009]逆序对数列
单组数据比51nod的那道题还弱...而且连优化都不用了.. #include<cstdio> #include<cstring> #include<cctype> ...
- BZOJ1831: [AHOI2008]逆序对
1831: [AHOI2008]逆序对 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 341 Solved: 226[Submit][Status] ...
- 【BZOJ2431】【HAOI2009】逆序对数列 DP
题目大意 问你有多少个由\(n\)个数组成的,逆序对个数为\(k\)的排列. \(n,k\leq 1000\) 题解 我们考虑从小到大插入这\(n\)个数. 设当前插入了\(i\)个数,插入下一个数可 ...
- bzoj1831 逆序对 (dp+树状数组)
注意到,所有的-1应该是一个不降的序列,否则不会更优那就先求出来不是-1的的逆序对个数,然后设f[i][j]表示第i个-1放成j的前i个-1带来的最小逆序对数量这个可以树状数组来求 #include& ...
随机推荐
- linux 输入子系统(4)---- input子系统的初始化
Input子系统的初始化函数为input_init(),如下: static int __init input_init(void) { int err; input_init_abs_bypass( ...
- mac 下 sphinx + mysql + php 实现全文搜索(xampp)(4)php api 解析
1:function GetLastError() // 假如报错的话,会输出报错信息 2:function GetLastWarning ()// 输出 警告信息 3:function SetSe ...
- JSON操作,转载
http://www.cnblogs.com/mcgrady/archive/2013/06/08/3127781.html#_label0
- 微信支付配置信息,JSAPI接口,H5调用微信js接口支付,微信公众号支付
微信支付已经做完了,没接触过微信的我,经历了非常艰难的3天,才把微信支付给做出来,对于专业的人来说,估计就是一小时就搞定的事情了,虽然说做了很长时间,但是确实也学到东西了,也收获了不少,下面跟大家分享 ...
- UI事件监听的击穿
什么是UI事件监听的击穿 在游戏视图中,有两个UI界面叠在一起的时候,单击一个空白处,却触发了被覆盖在下层了UI界面中的单击事件,这就是单击击穿了上层界面. 假设场景中放置了一个箱子,单击箱子会触发一 ...
- 微软职位内部推荐-This Job is no longer available.
微软近期Open的职位: 如果你想试试这个职位,请跟我联系,我是微软的员工,可以做内部推荐.发你的中英文简历到我的邮箱:Nicholas.lu.mail(at)gmail.com
- Spring MVC控制层的返回类型--String类型与Bean类型
SpringMVC控制层的返回类型形式多样,现拿其中的两种--String类型与Bean类型作以说明. 一.测试项目的结构 说明:(jsp的名字没起好) 控制层:UserController.java ...
- NOIP2014 行记
不知道OI是啥或者信息学竞赛是啥的可以按`Ctrl+W`. <del>很早开始写的..准备出分之后再发布.</del> 谨以此文纪念我信息学竞赛的第一次正式考试. 背景音乐底部 ...
- 【更新链接】U盘启动制作工具(UDTOOL) v3.0.2014.0427
[校验值] 文件: UDTOOLV3_Setup.exe大小: 525 MB版本: 3.0.2014.0427时间: 2014年4月27日MD5: 2E5187B7D9081E8A69B4DC45C8 ...
- 分析jQuery中的each方法
在看jQuery源码是怎么实现each方法之前,我们看一下js的原生实现. ECMAScript 5为数组定义了一个forEach方法,该方法接受两个参数:第一个参数是要在每一个数组项上运行的函数,第 ...