NOI P模擬賽 奶油蛋糕塔(狀壓 DP)

2022-09-11 01:33:11 字數 2796 閱讀 8079

資料範圍1≤n

≤5×1

051\leq n\leq5\times10^5

1≤n≤5×

105 。

n ≤20

n\leq 20

n≤20

的狀壓應該都會吧,狀態記錄已經選了的蛋糕集合,以及蛋糕序列的尾部奶油,然後列舉蛋糕轉移。

總共有 10

1010

種不同的蛋糕,資料很小。

把最後的蛋糕塔等效為乙個序列,如果有連續三個同種蛋糕,美味度分別為 a,b

,ca,b,c

a,b,

c,那麼就可以把他們等效為乙個美味度為 a+b

+ca+b+c

a+b+

c 的同種蛋糕,放在原來的位置。於是連續的一段奇數個同種蛋糕都可以合併成乙個蛋糕。

現在我們證明乙個結論:存在最優解,滿足對於每種蛋糕,按上述方式合併後,蛋糕數量不超過 2 個(至多兩段連續奇數段)。

考慮用調整法,對於任意解中的任意一種蛋糕,合併後仍存在三個不同位置的蛋糕 a,b

,ca,b,c

a,b,

c ,已知每種蛋糕都有兩種方向,由鴿籠原理可得,這三塊蛋糕一定至少有兩塊蛋糕是同向的。不妨設 a,b

a,ba,

b 的忌廉都是 左 x

xx 右 y

yy ,a

a<

b ,那麼區間 [a+

1,b−

1][a+1,b-1]

[a+1,b

−1] 的整體就是左 y

yy 右 x

xx 。我們把 [a+

1,b−

1][a+1,b-1]

[a+1,b

−1] 對稱翻轉,然後移開 a,b

a,ba,

b ,把 a,b

a,ba,

b 拼起來塞到 c

cc 的一側,最後合併 a,b

,ca,b,c

a,b,

c 。整個過程結束,蛋糕序列美味度總和不變,仍然合法,a,b

,ca,b,c

a,b,

c 卻變成了一塊蛋糕。

既然合併後每種蛋糕可以不超過兩個,那麼我們就可以提前把每種蛋糕最大的前奇數個合併到一起,最多留下乙個最小的,這樣每種蛋糕一開始就只有兩個,總的蛋糕數量 n

nn 降至 20

2020

,就可以用狀壓了。

#
include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

#define

maxn

500005

#define

lllong

long

#define

ullunsigned

long

long

#define

dbdouble

#define

lowbit

(x)(

-(x)

&(x))#

define

endl

putchar

('\n')#

define

fifirst

#define

sesecond

ll read()

while

(s >=

'0'&& s <=

'9')

return f*x;

}void

putpos

(ll x)

void

putnum

(ll x)

if(x<0)

return

putpos

(x);

}void

aiput

(ll x,

int c)

int n,m,s,o,k;

const

int id[4]

[4]=

,,,}

;priority_queue q[15]

;int a[25]

;ll w[25]

;vector<

int> bu[15]

;int le[15]

;ll dp[

1<<20|

5][4

];intmain()

for(

int i =

0;i <

10;i ++

)while

(!q[i]

.empty()

)}int tp =(1

<

; ll ans =0;

for(

int i =

1;i < tp;i ++)}

ans =

max(ans,dp[i]

[j]);}

}aiput

(ans,

'\n');

return0;

}

NOIP模擬 蛋糕(DP Dilworth定理)

誰能告訴我為什麼我的網路流炸了嗎。我相信是spj的鍋這年頭暴力不好打啊 所以我們按x排序,然後就是要找到序列中嚴格上公升序列的最少個數,然後。duang。dilworth定理 上公升序列的最少個數等於最長不上公升子串行長度 關於方案,我們在求最長不上公升子串行的時候,可以替換的位置一定是嚴格小於的關...

NOIP模擬 蛋糕(DP Dilworth定理)

誰能告訴我為什麼我的網路流炸了嗎。我相信是spj的鍋這年頭暴力不好打啊 所以我們按x排序,然後就是要找到序列中嚴格上公升序列的最少個數,然後。duang。dilworth定理 上公升序列的最少個數等於最長不上公升子串行長度 關於方案,我們在求最長不上公升子串行的時候,可以替換的位置一定是嚴格小於的關...

NOIP2014模擬11 3 蛋糕

今天是bessie的生日,他買了乙個蛋糕和朋友們一起分享,蛋糕可以看成是乙個r行c列的 共有r c個格仔,每個格仔都有乙個0至9的數字,表示該格仔蛋糕擁有的巧克力。現在bessie要把蛋糕橫的切3刀再豎的切3刀,由於bessie刀法厲害,所以每個格仔蛋糕都是完整的,顯然蛋糕會被切成16份,然後bes...