排座位&&Little Elephant And Permutation——排列dp的处理

Posted miracevin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排座位&&Little Elephant And Permutation——排列dp的处理相关的知识,希望对你有一定的参考价值。

排列的问题,就是要把序列排个序,使之达到某种最优值或者统计方案数

dp可以解决部分排列问题。

通常的解决方案是,按照编号(优先级)排序决策,从左到右决策两种。

这里主要是第一个。

 

排座位
? 有 ?? 个人坐成一排
? 对于相邻两个人 ??, ??
? 如果 ?? < ??,则会产生 ???? + ???? 的愉悦度
? 否则会产生 ???? + ???? 的愉悦度
? 求一个排列让最大化愉悦度
? ?? ≤ 3000

从左到右决策,肯定就要状压了。

但是可以发现,我们并不关心一个i左右是谁,只关心编号和i的相对大小。

而且,这个贡献ai,bj,ci,dj是可以独立的。

思路就比较自然了。

我们按照编号从小到大决策。

每个点i的放置有几种:

1.左右都比i小。

2/3.左/右比i大。

4.左右都比i大。

 

但是麻烦的是,如果直接dp可能最后形成不了一个序列。

不是一个整段。

所以,还要引入段的概念。

 

i的决策是:

1.左右都比i小,即连接之前的两个段。

2/3.左/右比i大,另一个比i小,即连接一个段。

4.左右都比i大,即i自成一段。

每种中,i对答案的贡献可以现场统计。

因为,我们的编号是从小到大处理的,

如果我们能够正确连接的话,这个贡献一定是可以算上的。

 

f[i][j]表示,处理完前编号i个,形成了j段的方案数。

 

还有一个问题是,边界情况,没有左/右,没有这个贡献。

那么可以f[i][j][0/1][0/1]表示是否放了最左边最右边的。

答案:f[n][1][1][1]

 

 

技术分享图片

Solution :

假定ai是一个1~n的数列。

对于合法的bi数列,乘上n!就是所有的ai和bi的情况了。

 

这样,贡献就比较好统计了。

dp[i][j][k]表示,处理bi中前i个位置,有j个是空的,贡献是k的方案数。

看这篇题解:

 

其实还有一个题:(虽然不是dp)

有趣的家庭菜园







以上是关于排座位&&Little Elephant And Permutation——排列dp的处理的主要内容,如果未能解决你的问题,请参考以下文章

hdu2276---Kiki &amp; Little Kiki 2(矩阵)

HDU2275 Kiki &amp; Little Kiki 1

Motorola & Intel, Big Endian & Little Endian,大端和小端

排队理论之性能分析 - Little Law &amp; Utilization Law

[HDU2276]Kiki & Little Kiki 2

hdu 2276 Kiki & Little Kiki 2 矩阵快速幂