傳送門
有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...