usaco 4.1.2 Fence Rails 搜索剪枝

這個題是我做usaco第一個不看解題報告做不出來的題目。

題目大意:有N根木料,和需要R根木板,我們就要判斷最多可以用那些木料可以切出多少根木板。木料和木板的長度都可能是不同的。N <=50   R  <1024   還有木板的長度要小於128。

根據木板的長度小於128我們可以知道有很多種重複的木板長度是我們需要的,這裏就是剪枝的關鍵所在了。我們當然知道是用深搜判斷能否切出X根木板。我是一個一個木板搜,看看能不能滿足要求。首先是判斷最大的根數,然後遞減的判斷能不能滿足條件。很容易證明能切出X根木板,就一定可以切出X小的木板,所以我們要先把木板排序,然後搜索。

剪枝:

1  如果有三根連續的相等的木板是我們需要的我們可能用木料中的3 2 1和3 1 2去切,這樣結果是一樣的,所以我們可以剪枝,我們只要相等的時候就按照不增的順序搜,這樣就不會有3 1 2的切法了。木料也可能這樣處理。

2   浪費值剪枝,只要剩下的木料的長度<最小的木板長度,這部分就會浪費掉,我們同樣可以知道在判斷X的時候的最大浪費值,如果浪費值〉最大浪費值當然要剪枝

3   其他在前面已經講了

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章