達達幫翰翰給女生送禮物,翰翰一共準備了n個禮物,其中第i個禮物的重量是g[i]。
達達的力氣很大,他一次可以搬動重量之和不超過w的任意多個物品。
達達希望一次搬掉盡量重的一些物品,請你告訴達達在他的力氣範圍內一次效能搬動的最大重量是多少。
輸入格式
第一行兩個整數,分別代表w和n。
以後n行,每行乙個正整數表示g[i]。
輸出格式
僅乙個整數,表示達達在他的力氣範圍內一次效能搬動的最大重量。
資料範圍
1≤n≤46
,1≤w,g[i]≤231−1
輸入樣例:
20 575
4181輸出樣例:
用二分的時候陣列必須是排過序的,這道題資料規模量是46,如果單向dfs肯定會t,那麼雙向bfs先搜出一半的選法,再搜另一半,打表搜左邊的值,次次更新ans,小優化,從大到小列舉重量,去重表,記得判斷大小的時候開longlong。
#include
using
namespace std;
const
int n=46;
int w[n]
;int wei[
1<<26]
;int n,m;
int cnt=1;
int ans=0;
int k;
void
dfs(
int u,
int s)
dfs(u+
1,s);if
((long
long
)s+w[u]
<=m)
}void
dfs2
(int u,
int s)
else
r=mid-1;
} ans=
max(ans,wei[l]
+s);
return;}
dfs2
(u+1
,s);if(
(long
long
)s+w[u]
<=m)
}int
main()
柵欄 二分 dfs 貪心
農夫約翰打算建立乙個柵欄將他的牧場給圍起來,因此他需要一些特定規格的木材。於是農夫約翰到木材店購 買木材。可是木材店老闆說他這裡只剩下少部分大規格的木板了。不過約翰可以購買這些木板,然後切割成他所需 要的規格。而且約翰有一把神奇的鋸子,用它來鋸木板,不會產生任何損失,也就是說長度為10的木板可以切成...
柵欄的木料(二分 dfs)
題目描述 description 農民john準備建乙個柵欄來圍住他的牧場。他已經確定了柵欄的形狀,但是他在木料方面有些問題。當地的雜貨儲存商扔給john一些木板,而john必須從這些木板中找出盡可能多所需的木料。當然,john可以切木板。因此,乙個9英呎的木板可以切成乙個5英呎和乙個4英呎的木料 ...
bzoj 1082 柵欄(二分 DFS)
傳送門biu 先排序,二分最多能得到多少木板,顯然要盡量選小的木板,當木材大小小於最小的木塊時丟棄。記錄當前丟棄的木材量,若加上mid塊木板 所有的木材 則不合法。includeusing namespace std int m,n,mid bool flag int a 55 sa,b 1005 ...