若干根棍子,不能折,不能多餘求能夠組成的最大長方形。
首先我們發現如果棍子集合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...