jzoj2679 跨時代 揹包,dfs,狀壓

2021-09-25 01:16:14 字數 947 閱讀 9265

若干根棍子,不能折,不能多餘求能夠組成的最大長方形。

首先我們發現如果棍子集合s

ss長度為l

ll且它有子集g

gg長度為l

2\frac

2l​那麼就表示這個集合的棍子可以作為乙個矩形的對應兩邊,這樣我們只要列舉兩個不相交集合作為長寬就好了。

我們設g

ig_i

gi​表示二進位制表示的集合i

ii十分可以折半。我們預處理g

gg陣列,對於每個集合,我們做乙個揹包預處理就好了。

然後d fs

dfsdf

s那些邊作為長,那些邊做寬就可以了。

時間複雜度:o(2

nnl+

3n

)o(2^nnl+3^n)

o(2nnl

+3n)

但實際上遠遠達不到這個複雜度

#include

#include

#include

using

namespace std;

int n,a[20]

,ms,f[

3000

],g[

1<<17]

,ans;

void

dfs(

int dep,

int c1,

int c2,

int len,

int wigh)

intmain()

if(f[sum/2]

) g[i]=1

;}dfs(0,

0,0,

0,0)

;if(!ans)

printf

("no solution");

else

printf

("%d"

,ans/4)

;}

JZOJ 2679 跨時代 dfs 狀壓

傳送門 有n nn個棍子,要求我們用這些棍子可以拼出的矩形的最大面積 棍子可以不全用 因為n nn很小,又涉及到方案,我們便開始嘗試用狀壓來表示方案 用d fs dfsdf s來列舉棍子是否使用,憑藉前面狀壓表示出來的方案判斷是否可行,不斷取最大值 include include include i...

DP專題 2679 跨時代

1.題目描述 鐘逆時針而繞,噁物猙獰的傾巢,我謙卑安靜地於城堡下的晚禱,壓抑遠古流竄的蠻荒暗號,而管風琴鍵高傲的說,那只是在徒勞。我的樂器在環繞,時代無法淘汰我霸氣的皇朝。你無法預言,因為我越險,翅越豔 沒有句點,跨時代蔓延,翼朝天。月下浮雕,魔鬼的淺笑,狼迎風嚎,蝠翔似黑潮,用孤獨去調尊嚴的色調。...

《GMOJ Senior 2679 跨時代》題解

給出n nn根欄杆的長度,讓你從這n nn根欄杆中選出一些欄杆圍成乙個矩形 必須要剛好圍成乙個矩形,即不能出現多餘的邊長,且不能切斷欄杆,但所給欄杆不一定要全部用上 求圍成矩形的最大面積。對於30 30 30 的資料,1 n 10 1 leq n leq 10 1 n 10 對於100 100 10...