1. 程式人生 > >Newcoder 110 E.Pocky遊戲(狀壓)

Newcoder 110 E.Pocky遊戲(狀壓)

Description

社交活動中有 n n 個男孩和 n n 個女孩。

他們玩的其中一場比賽是通過 p o

c k y pocky 傳遞橡皮筋( p o c k y
pocky
是一種長條餅乾)。

與正常的社交活動遊戲不同,只有兩支隊伍,男隊和女隊。

遊戲規則如下,

1.兩隊都有 n n 個編號從 1

1 n n 的馬甲。

2.對手隊將給出長度為 m m 的整數序列 a 1 , . . . , a m a_1,...,a_m 。所有數字將在 1 1 n n (含 n n )之間,並且所有相鄰數字都不相同(對於所有 1 i < m a i a i + 1 1\le i<m,a_i\neq a_{i+1} )。

3.在對手隊給出序列之後,另一隊開始計劃背心的穿著策略。請注意,團隊成員在遊戲過程中不能交換背心。

4.當比賽開始時,橡皮筋將被放在穿著 a 1 a_1 編號的背心的隊員嘴中的 p o c k y pocky 上。 然後,穿著 a 1 a_1 編號的背心的隊員必須將橡皮筋傳遞給穿著 a 2 a_2 編號的背心的隊員,而不能用手,如此進行下去…。當橡皮筋通過 m 1 m - 1 次並且已經在穿著 a m a_m 編號的背心的隊員的 p o c k y pocky 上時,遊戲將結束。

5.第一隊完成是勝利的隊。

S h i k y Shiky 是演算法大師。他從未在任何戰略遊戲中失利。他相信他會像以前一樣贏得這場比賽。

他發現兩名隊員之間的身高差距越大,他們之間的橡皮筋越難通過。

基於這一觀察,他定義了一次傳遞橡皮筋的難度為身高差的絕對值。

你是 S h i k y Shiky 對手隊伍的領導者。

你知道 S h i k y Shiky 編寫了一個程式來計算他的團隊難度的最小可能總和。

既然你不想輸,你決定為你的團隊編寫一個具有相同功能的程式。

PS :由於 S h i k y Shiky 有女朋友,所以你不能引誘他獲取原始碼,而且他女朋友沒參加這場比賽( 2333333 2333333

Input

第一行有兩個整數 n n m m 。 它表明有 n n 個男孩和 n n 個女孩,而 S h i k y Shiky 的團隊會給你一個長度為 m m 的序列。

第二行有 n n 個整數 h 1 h 2 . . . h n h_1,h_2 ...,h_n ,表示你所有團隊成員的身高。

第三行有 m m 個整數 a 1 a 2 . . . a m a_1,a_2 ...,a_m ,表示 S h i k y Shiky 團隊給出的序列。

( 1 n 20 , 2 m 1000 , 120 h i 240 , 1 a i n , a i a i + 1 ) (1\le n\le 20,2\le m\le 1000,120\le h_i\le 240,1\le a_i\le n,a_i\neq a_{i+1})

Output

輸出一個整數表示團隊難度的最小可能總和。

Sample Input

3 3
170 175 180
1 2 3

Sample Output

10

Solution

狀壓 D P DP ,從低到高安排身高,以 d p [ S ] dp[S] 表示已經給 S S 狀態的人安排好了前 n u m [ S ] num[S] 個身高,其中 n u m [ S ] num[S] 表示 S S 二進位制表示中 1 1 的個數,對於 S S 中為 1 1 的位置 x x ,考慮給 x x 身高為 h n u m [ S ] h_{num[S]} ,那麼把 x x 安排進去之後,對團隊難度的貢獻分為兩部分:正部分為 x x S S 中為 1 1 位置 y y 的相鄰次數,因為 y y 的身高必然小於 x x ,而負部分為 x x S S 中為 0 0 位置 y y 的相鄰次數,因為 y y 的身高必然大於 x x ,記 n u m [ x ] [ y ] num[x][y] a 1 , . . . , a m a_1,...,a_m x , y x,y 相鄰的次數,那麼即可 O ( n )