JZOJ 2679 跨時代 dfs 狀壓

2021-09-25 01:27:06 字數 1107 閱讀 3644

傳送門

有n

nn個棍子,要求我們用這些棍子可以拼出的矩形的最大面積

棍子可以不全用

因為n

nn很小,又涉及到方案,我們便開始嘗試用狀壓來表示方案

用d fs

dfsdf

s來列舉棍子是否使用,憑藉前面狀壓表示出來的方案判斷是否可行,不斷取最大值

#include

#include

#include

#include

#include

#include

#define ll long long

#define lzx ilu

using namespace std;

inline ll read()

while

(s>=

'0'&&s<=

'9')

return d*f;

}int x[20]

,ans=

0,n;

int f[

245]

,tf[(1

<<17)

];void

dfs(

int i,

int a,

int b,

int f1,

int f2)

dfs(i+

1,a,b,f1,f2)

;dfs

(i+1

,a+x[i]

,b,f1|(1

<<

(i-1))

,f2)

;dfs

(i+1

,a,b+x[i]

,f1,f2|(1

<<

(i-1))

);return;}

intmain()

if(f[sum>>1]

) tf[i]=1

;}dfs(1,

0,0,

0,0)

;if(!ans)

printf

("no solution");

else cout

}

jzoj2679 跨時代 揹包,dfs,狀壓

若干根棍子,不能折,不能多餘求能夠組成的最大長方形。首先我們發現如果棍子集合s ss長度為l ll且它有子集g gg長度為l 2 frac 2l 那麼就表示這個集合的棍子可以作為乙個矩形的對應兩邊,這樣我們只要列舉兩個不相交集合作為長寬就好了。我們設g ig i gi 表示二進位制表示的集合i ii...

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...