資料範圍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...