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

來源:互聯網
上載者:User

標籤:部分   tle   rac   alt   序列   直接   概念   blog   大小   

排列的問題,就是要把序列排個序,使之達到某種最優值或者統計方案數

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的處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.