題目描述
還記得童話《賣火柴的小女孩》嗎?現在,你知道小女孩有多少根火柴,請找出一種能使用所有火柴拼成乙個正方形的方法。不能折斷火柴,可以把火柴連線起來,並且每根火柴都要用到。
輸入為小女孩擁有火柴的數目,每根火柴用其長度表示。輸出即為是否能用所有的火柴拼成正方形。
樣例輸入: [1,1,2,2,2]
輸出: true
解釋: 能拼成乙個邊長為2的正方形,每邊兩根火柴。
輸入: [3,3,3,3,4]
輸出: false
解釋: 不能用所有火柴拼成乙個正方形。
注意:給定的火柴長度和在 0 到 10^9之間。
火柴陣列的長度不超過15。
筆記經典剪枝優化問題:
所有火柴拼成4條等長的邊: a=sum%4==0
依次構造正方形的每條邊:
從大到小列舉所有邊: 如 2 3 4 5 6 7
若剪 2:剪枝砍掉 3467 優先列舉分支少的,剪掉的更多
若剪 7:剪枝砍掉 2345
每條邊內部的木棒長度規定從大到小
當前木棒拼接失敗,跳過後面所有長度相同的木棒
如果當前木棒拼接失敗,且是當前邊的第乙個,則直接剪掉當前分支
如果當前木棒拼接失敗,且是當前邊的最後乙個,則直接剪掉當前分支
**
class
solution
bool
dfs(vector<
int>
& nums,
int count,
int cur,
int a)
}return
false;}
};
c c 演算法刷題筆記 洛谷闖關1 2
p1035 級數求和 p1423 小玉在游泳 p1424 小魚的航程 改進版 p1980 計數問題 前幾篇都是比較基礎的題目,仍然記錄的意義在於 把其他地方的零碎筆記騰上來 不要小看基礎,基礎和基礎加起來就會很牛批了哦 同時回顧以前的題目,看能不能瞬間捋清思路。題目描述 將1,2,9共9個數分成3組...
c c 演算法刷題筆記 自測模考 2018
前言 今天做了2018年的上機真題,雖簡單,但除第一題以外其他三題並不無腦。第二道被卡住超過半小時,主要原因 對 string 的操作還不夠熟悉,簡單認知,但不能熟練靈活利用。問題描述 近來,跳一跳這款小遊戲風靡全國,受到不少玩家的喜愛。簡化後的跳一跳規則如下 玩家每次從當前方塊跳到下乙個方塊,如果...
刷題 子集和問題的回溯剪枝解法
輸入給定整數集,問是否存在該整數集的子集,使得該子集元素的和為0。比如給定的整數集合為 7,3 2,5,8 存在集合的子集 3,2,5 該子集和為0。input 2 3 4 5 0output 1101 0000這裡不給出 如果有興趣可以去看一下 程老師 的書。傳統解法的思路是 直接窮舉出所有子集合...