農夫約翰打算建立乙個柵欄將他的牧場給圍起來,因此他需要一些特定規格的木材。於是農夫約翰到木材店購
買木材。可是木材店老闆說他這裡只剩下少部分大規格的木板了。不過約翰可以購買這些木板,然後切割成他所需
要的規格。而且約翰有一把神奇的鋸子,用它來鋸木板,不會產生任何損失,也就是說長度為10的木板可以切成長
度為8和2的兩個木板。你的任務:給你約翰所需要的木板的規格,還有木材店老闆能夠給出的木材的規格,求約翰
最多能夠得到多少他所需要的木板。
原料和需求排一下序,然後二分需求看看是否能完成
貪心思路是用最小的原料完成最大的任務,這樣,剩下來的原料如果連最小的需求都無法完成,就加到rest裡面,
相當於是廢掉的材料。
剪枝方面,如果走到了最後一塊,說明搜尋完成,return標記為一,直接返回。
如果下一塊長度與當前長度相等,列舉起始位置由當前位置開始,因為前面的都小於當前原料長度,所以不用搜尋,減少搜尋複雜度
否則從初始位置開始搜尋
這裡的板材長度相當於visit了,因為板材切掉之後,再次列舉到和當前長度相當的時候會因為長度不夠而無法取到。
#include#include#include#includeusing namespace std;
int a[1005],b[1005],ans,rest,need,tot,n,m,sum[1005];
bool dfs(int bound,int start)
else
}printf("%d\n",ans);
}
柵欄的木料(二分 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 ...
二分貪心 21
題目大概 有n堆積木,積木高度不同,每個小方塊高度相同。問,最少移動多少小方塊,使得這些積木堆高度相等。思路 先求這些積木的平均數,在把所有的高度與平均數的差值加起來,最後除2,就是最少移動的方塊數。感想 這個題有一點很坑人,最後輸出的時候有乙個小點,不注意看看不到。include include ...